Op mijn website staan in een fotoalbum foto's, deze foto's staan natuurlijk opgeslagen in een map op de server. Graag zou ik sommige bezoekers van mijn site ook de mogelijkheid geven om de foto's op te slaan op hun eigen pc. En omdat het zo verveelend is om foto per foto met de rechter muis knop op te slaan, is mijn vraag: is het mogelijk om bepaalde mensen mappen van mijn server te laten downloaden.(In dit geval dus mappen met foto's) zonder dat ze ook bij rest van de bestanden en mappen op de server kunnen. Ik heb op google gezocht en op dit forum, maar geen heb gooie uitleg of oplossingen kunnen vinden over dit probleem.
Waarom zip je ze niet gewoon en plaats je een linkje naar 't zipje?
Kun je via PHP vast wel doen.. Interne zip-functionaliteit is read-only, maar via exec() of system() ofzo moet wel iets mogelijk zijn
[ Voor 51% gewijzigd door Osiris op 06-09-2005 14:46 ]
Ik denk dat het eenvoudigste is wat je kunt doen, is de mappen die je wilt aanbieden in een RAR / ZIP-file te zetten.
Trans-life! :::: "All things change, whether from inside out or the outside in. That is what magic is. And we are magic too."
Je kan ook een directory beschikbaar maken via FTP en het wachtworod aan die groep mensen geven.
Of een pagina maken met links naar al die foto's en die mensen vertellen dat ze Firefox + DownTHEMall! extensie moeten gebruiken, dan kan je makkelijk in 1 keer alle (gelinkte) foto's op die pagina downloaden.
Of een pagina maken met links naar al die foto's en die mensen vertellen dat ze Firefox + DownTHEMall! extensie moeten gebruiken, dan kan je makkelijk in 1 keer alle (gelinkte) foto's op die pagina downloaden.
Aan de inhoud van de bovenstaande tekst kunnen geen rechten worden ontleend, tenzij dit expliciet in dit bericht is verwoord.
Ik kan ze natuurlijk zelf op mijn computer zippen en op de server zetten, en dan naar die zipbestanden een link plaatsen. Maar als ik alle foto's die in de mappen staan zip is het nog bijna 70 mb. Dus ik d8 om ruimte te besparen kan ik mischien beter de bezoekers beter die mappen laten downloaden, want die staan er toch al op!
Je kunt ook on-the-fly een zip-bestand laten creeeren op het moment dat iemand dat wil. Dan hoef je geen zip-bestanden op je server op te slaan. Ik dacht zelfs dat PHP daar al voorzieningen voor heeft.
Statistics are like bikinis. What they reveal is suggestive, but what they hide is vital.
Wat bedoel je hier precies mee?Johnny schreef op dinsdag 06 september 2005 @ 14:49:
Je kan ook een directory beschikbaar maken via FTP en het wachtworod aan die groep mensen geven.
Dat is inderdaad precies wat ik zoek, maar ik heb al op google daarnaar gezocht, maar omdat de naamen van de benodigde functies niet ken, kom ik niet heel ver!JaWi schreef op dinsdag 06 september 2005 @ 14:52:
Je kunt ook on-the-fly een zip-bestand laten creeeren op het moment dat iemand dat wil. Dan hoef je geen zip-bestanden op je server op te slaan. Ik dacht zelfs dat PHP daar al voorzieningen voor heeft.
Als ik "zip" op http://nl.php.net intik, dan krijg ik al snel boven water dat er in phpMyAdmin een prima library zit om on-the-fly zip-bestanden aan te maken.Verwijderd schreef op dinsdag 06 september 2005 @ 15:00:
[...]
Dat is inderdaad precies wat ik zoek, maar ik heb al op google daarnaar gezocht, maar omdat de naamen van de benodigde functies niet ken, kom ik niet heel ver!
Succes!
Statistics are like bikinis. What they reveal is suggestive, but what they hide is vital.
Het is wel zo dat de server niet van mij is en ik een stukje ruimte huur van een bedrijf. Dus ik kan geen dingen op de server installeren. En als ik dithttp://nl3.php.net/memcache goed lees dat er dat ik sowiso Zlib nodig heb, en dat ik memcache moet instaleeren op de server. Hier is mijn php info paginahttp://www.trutfotos.nl/info.php, daar lees ik dat Zlib enabled is (versie 1.1.4
) maar dat zlib.output_compression uit staat. Van dat laaste weet ik trouwens niet wat het is. Kan ik nu alsnog gebruik maken van de zlib functie om on the fly mappen te zippen of niet?
) maar dat zlib.output_compression uit staat. Van dat laaste weet ik trouwens niet wat het is. Kan ik nu alsnog gebruik maken van de zlib functie om on the fly mappen te zippen of niet?
Zend: Creating Zip files with PHP
Ja.Kan ik nu alsnog gebruik maken van de zlib functie om on the fly mappen te zippen of niet?
[ Voor 37% gewijzigd door chris op 06-09-2005 15:24 ]
Hmm, als je phpMyAdmin eens download, daar 't bestand "zip.lib.php" uithaalt en deze gebruikt, dan heb je geen memcache, noch zlib nodig. Heb het net zelf even bekeken en was eigenlijk verbaasd over de eenvoud van de betrokken library...Verwijderd schreef op dinsdag 06 september 2005 @ 15:20:
Het is wel zo dat de server niet van mij is en ik een stukje ruimte huur van een bedrijf. Dus ik kan geen dingen op de server installeren. En als ik dithttp://nl3.php.net/memcache goed lees dat er dat ik sowiso Zlib nodig heb, en dat ik memcache moet instaleeren op de server. Hier is mijn php info paginahttp://www.trutfotos.nl/info.php, daar lees ik dat Zlib enabled is (versie 1.1.4
) maar dat zlib.output_compression uit staat. Van dat laaste weet ik trouwens niet wat het is. Kan ik nu alsnog gebruik maken van de zlib functie om on the fly mappen te zippen of niet?
Statistics are like bikinis. What they reveal is suggestive, but what they hide is vital.
Kan dit ook als ik niets op der sever kan instaleeren, ik kan bijv niet bij php.ini geloof ik.JaWi schreef op dinsdag 06 september 2005 @ 15:22:
[...]
Hmm, als je phpMyAdmin eens download, daar 't bestand "zip.lib.php" uithaalt en deze gebruikt, dan heb je geen memcache, noch zlib nodig.
Ik hebt het net even gecortoleerd en ik kan php.ini niet instellen of aanpassen, en ik heb wel phpmyadmin maar ik geloof dat die alllen voor mijn database is
[ Voor 25% gewijzigd door Verwijderd op 06-09-2005 15:36 ]
ik heb nu wel dit script gevonden, maar weet eerlijk gezegd niet egt hoe ik het nou toepasbaar moete maken? Iemand een id?
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
| <?php /* $Id: zip.lib.php,v 2.2 2004/04/27 12:36:11 nijel Exp $ */ // vim: expandtab sw=4 ts=4 sts=4: /** * Zip file creation class. * Makes zip files. * * Based on : * * http://www.zend.com/codex.php?id=535&single=1 * By Eric Mueller <eric@themepark.com> * * http://www.zend.com/codex.php?id=470&single=1 * by Denis125 <webmaster@atlant.ru> * * a patch from Peter Listiak <mlady@users.sourceforge.net> for last modified * date and time of the compressed file * * Official ZIP file format: http://www.pkware.com/appnote.txt * * @access public */ class zipfile { /** * Array to store compressed data * * @var array $datasec */ var $datasec = array(); /** * Central directory * * @var array $ctrl_dir */ var $ctrl_dir = array(); /** * End of central directory record * * @var string $eof_ctrl_dir */ var $eof_ctrl_dir = "\x50\x4b\x05\x06\x00\x00\x00\x00"; /** * Last offset position * * @var integer $old_offset */ var $old_offset = 0; /** * Converts an Unix timestamp to a four byte DOS date and time format (date * in high two bytes, time in low two bytes allowing magnitude comparison). * * @param integer the current Unix timestamp * * @return integer the current date in a four byte DOS format * * @access private */ function unix2DosTime($unixtime = 0) { $timearray = ($unixtime == 0) ? getdate() : getdate($unixtime); if ($timearray['year'] < 1980) { $timearray['year'] = 1980; $timearray['mon'] = 1; $timearray['mday'] = 1; $timearray['hours'] = 0; $timearray['minutes'] = 0; $timearray['seconds'] = 0; } // end if return (($timearray['year'] - 1980) << 25) | ($timearray['mon'] << 21) | ($timearray['mday'] << 16) | ($timearray['hours'] << 11) | ($timearray['minutes'] << 5) | ($timearray['seconds'] >> 1); } // end of the 'unix2DosTime()' method /** * Adds "file" to archive * * @param string file contents * @param string name of the file in the archive (may contains the path) * @param integer the current timestamp * * @access public */ function addFile($data, $name, $time = 0) { $name = str_replace('\\', '/', $name); $dtime = dechex($this->unix2DosTime($time)); $hexdtime = '\x' . $dtime[6] . $dtime[7] . '\x' . $dtime[4] . $dtime[5] . '\x' . $dtime[2] . $dtime[3] . '\x' . $dtime[0] . $dtime[1]; eval('$hexdtime = "' . $hexdtime . '";'); $fr = "\x50\x4b\x03\x04"; $fr .= "\x14\x00"; // ver needed to extract $fr .= "\x00\x00"; // gen purpose bit flag $fr .= "\x08\x00"; // compression method $fr .= $hexdtime; // last mod time and date // "local file header" segment $unc_len = strlen($data); $crc = crc32($data); $zdata = gzcompress($data); $zdata = substr(substr($zdata, 0, strlen($zdata) - 4), 2); // fix crc bug $c_len = strlen($zdata); $fr .= pack('V', $crc); // crc32 $fr .= pack('V', $c_len); // compressed filesize $fr .= pack('V', $unc_len); // uncompressed filesize $fr .= pack('v', strlen($name)); // length of filename $fr .= pack('v', 0); // extra field length $fr .= $name; // "file data" segment $fr .= $zdata; // "data descriptor" segment (optional but necessary if archive is not // served as file) $fr .= pack('V', $crc); // crc32 $fr .= pack('V', $c_len); // compressed filesize $fr .= pack('V', $unc_len); // uncompressed filesize // add this entry to array $this -> datasec[] = $fr; // now add to central directory record $cdrec = "\x50\x4b\x01\x02"; $cdrec .= "\x00\x00"; // version made by $cdrec .= "\x14\x00"; // version needed to extract $cdrec .= "\x00\x00"; // gen purpose bit flag $cdrec .= "\x08\x00"; // compression method $cdrec .= $hexdtime; // last mod time & date $cdrec .= pack('V', $crc); // crc32 $cdrec .= pack('V', $c_len); // compressed filesize $cdrec .= pack('V', $unc_len); // uncompressed filesize $cdrec .= pack('v', strlen($name) ); // length of filename $cdrec .= pack('v', 0 ); // extra field length $cdrec .= pack('v', 0 ); // file comment length $cdrec .= pack('v', 0 ); // disk number start $cdrec .= pack('v', 0 ); // internal file attributes $cdrec .= pack('V', 32 ); // external file attributes - 'archive' bit set $cdrec .= pack('V', $this -> old_offset ); // relative offset of local header $this -> old_offset += strlen($fr); $cdrec .= $name; // optional extra field, file comment goes here // save to central directory $this -> ctrl_dir[] = $cdrec; } // end of the 'addFile()' method /** * Dumps out file * * @return string the zipped file * * @access public */ function file() { $data = implode('', $this -> datasec); $ctrldir = implode('', $this -> ctrl_dir); return $data . $ctrldir . $this -> eof_ctrl_dir . pack('v', sizeof($this -> ctrl_dir)) . // total # of entries "on this disk" pack('v', sizeof($this -> ctrl_dir)) . // total # of entries overall pack('V', strlen($ctrldir)) . // size of central dir pack('V', strlen($data)) . // offset to start of central dir "\x00\x00"; // .zip file comment length } // end of the 'file()' method } // end of the 'zipfile' class ?> |
PHP:
1
2
3
4
| //zoiets ongeveer als ik de comments moet geloven $tmp=new zipfile(); $tmp->addFile(file_get_contents('/jefile.txt'), 'eventueelnieuwefilename.txt'); print_r($tmp->file()); |
Ik heb hier wel een compleet werkend script voor.. (detecteerd ook zelf de directory structuur...) Maar ik krijg vaak de error:
Fatal error: Allowed memory size of 8388608 bytes exhausted (tried to allocate 552358 bytes) in php/mkzip_parent/makezip/zip.lib.php on line 113
vooral als het om veel grote files gaat, zoals bijvoorbeeld foto's.
Iemand hier een oplossing voor?
Verder, als iemand sourcecode wil, laat het ff weten..
btw, script is te bekijken op http://trinite.mine.nu/~trinite/mkzip_parent/makezip/
Fatal error: Allowed memory size of 8388608 bytes exhausted (tried to allocate 552358 bytes) in php/mkzip_parent/makezip/zip.lib.php on line 113
vooral als het om veel grote files gaat, zoals bijvoorbeeld foto's.
Iemand hier een oplossing voor?
Verder, als iemand sourcecode wil, laat het ff weten..
btw, script is te bekijken op http://trinite.mine.nu/~trinite/mkzip_parent/makezip/
[ Voor 10% gewijzigd door trinite_t op 06-09-2005 18:32 ]
The easiest way to solve a problem is just to solve it.
Verwijderd
Zoek maar met Google naar de sleutelwoorden uit die foutmelding. Simpel probleem, simpel antwoord.
memory_limit in php.ini hoger zetten, die is standaard 8mb (als je daar bij kunt teminste)trinite_t schreef op dinsdag 06 september 2005 @ 18:29:
) Maar ik krijg vaak de error:
Fatal error: Allowed memory size of 8388608 bytes exhausted (tried to allocate 552358 bytes) in php/mkzip_parent/makezip/zip.lib.php on line 113
vooral als het om veel grote files gaat, zoals bijvoorbeeld foto's.
Iemand hier een oplossing voor?
Edit: spuit11
[ Voor 3% gewijzigd door Xboty op 06-09-2005 18:33 ]
Enige oplossing die ik hiervoor kan vinden is de waardes in php.ini aanpassen, en daar kan ik niet bij...
The easiest way to solve a problem is just to solve it.
Ik weet niet in hoeverre dit mogelijk is met het zippen van bestanden (heb nog nooit naar het achterliggende algoritme gekeken) maar als je slim met streams omgaat en het compressie algoritme bijvoorbeeld per chunk van n bytes gaat comprimeren dan zou je aan on the fly compressie kunnen doen en n bytes inlezen, n bytes compressen en de volgende chunk data ophalen.trinite_t schreef op dinsdag 06 september 2005 @ 18:33:
Enige oplossing die ik hiervoor kan vinden is de waardes in php.ini aanpassen, en daar kan ik niet bij...
Het voordeel hiervan is dat je niet tegen je memorylimit aanloopt.
Op dezelfde wijze heb ik dingen als on the fly base64 encoding/decoding gerealiseerd en dat werkt perfect.
edit:
met gzwrite i.p.v. gzcompress zou je een heel eind moeten komen
met gzwrite i.p.v. gzcompress zou je een heel eind moeten komen
[ Voor 6% gewijzigd door stekkel op 06-09-2005 18:59 ]
Ja ho effeik heb nu wel dit script gevonden, maar weet eerlijk gezegd niet egt hoe ik het nou toepasbaar moete maken? Iemand een id?
Bekijk dat script, ga zelf eens aan de slag etc. Als je er niet uitkomt kan je altijd de maker van het script nog ff proberen aan te spreken
Zie ook P&W FAQ - De "quickstart"
"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney
Pagina: 1
Dit topic is gesloten.
![]()