[PHP] Slaat deel input over ?

Pagina: 1
Acties:

  • easydisk
  • Registratie: Februari 2000
  • Laatst online: 07-09 11:06
Met $fp = fsockopen(...); en fputs wat dingen gedaan, en dan krijg ik nu dus de data (binair, bijv een mp3, image of movie ) en dat wil ik opslaan, maar hij mist iets in de file,


$fout = fopen("/tmp/test", "w");
while(!feof($fp)) {
$output = fgets($fp,1);
fputs($fout, $output);
echo "Hier <br> \n";
}
fclose($fp);
fclose($fout);

Als de input ABCDEF... is, staat er in /tmp/test bijv
AFQZ.

Wat gaat er mis ?

  • Grum
  • Registratie: Juni 2001
  • Niet online
jah DOH

je doet fgets op 1 teken :)

Read The Fine Manual

btw voor binary reads kan je beter gewoon fread gebruiken :)

vergeet niet als je onder windows zit dat je even de 'b' 'bit' meegeeft bij et openen van je file :)

  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06-2025

drm

f0pc0dert

Op maandag 11 maart 2002 16:48 schreef Grum het volgende:
jah DOH

je doet fgets op 1 teken :)

Read The Fine Manual
ehmmm over *SLAP* *SLAP* gesproken :*

easydisk>
laat me raden. Windows bak? Binaire bestanden? Zou je je bestand dan misschien ook binair openen?
$file = fopen ( "/tmp/test", "wb" );

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz


  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

Op maandag 11 maart 2002 16:48 schreef Grum het volgende:
jah DOH

je doet fgets op 1 teken :)
Ach, dat is behalve extreem inefficient niet perse fout :)
Tenminste, als je fread() zou gebruiken ;)

Neem trouwens een buffer grootte van 4096 bytes, dat is de standaardbuffer/blocksize van de meeste OS-en en daardoor gaat het net even wat efficienter.

  • easydisk
  • Registratie: Februari 2000
  • Laatst online: 07-09 11:06
het is een Linux bak, anders bestaat /tmp/test toch niet (dan wordt het c:\temp\test)


En ja steeds 1 teken, heb ook met 100 en 10000 geprobeerd, steeds fouten. Maar er staat toch while(!eof(...

dus steeds 1 teken inlezen en wegschrijven, en dan het volgende teken inlezen, echter op de een of andere manier raakt ie het volende teken kwijt en begint ie bij het tigste teken.

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

Op maandag 11 maart 2002 16:55 schreef easydisk het volgende:
dus steeds 1 teken inlezen en wegschrijven, en dan het volgende teken inlezen, echter op de een of andere manier raakt ie het volende teken kwijt en begint ie bij het tigste teken.
Daarom moet je ook geen fgets gebruiken :)

Maar fread, binaire bestanden kunnen op de gekste plekken een 'regeleinde' hebben... En fgets snapt dat dan niet helemaal.

  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06-2025

drm

f0pc0dert

easydisk:
het is een Linux bak, anders bestaat /tmp/test toch niet (dan wordt het c:\temp\test)
Dat maakt niets uit, hoor :) Je kunt forward en backward slashes ook onders Windows in PHP gebruiken ;)

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz


  • easydisk
  • Registratie: Februari 2000
  • Laatst online: 07-09 11:06
Ja maar bij fread moet je een lengte ingeven van hoelang die file is, echter dat is onbekend, en tja movies kunnen soms wel groot worden (700 MB) en ik wil het toch wel (om de 100 Kb of zo) saven om het niet helemaal kwijt te zijn als de tegenpartij plost stopt met sturen van data. Kan ik later wel weer resumen.

--edit--
opgelost, fread kan ook met while :)

--edit 2--

tja, het is toch niet de beste oplossing, past wel mooit in al m'n andere dingen, echter PHP maakt z'n gehuegen niet leeg, dus na 8 MB knalt ie er uit, want meer mag ie niet gebruiken.

  • Grum
  • Registratie: Juni 2001
  • Niet online
Op maandag 11 maart 2002 16:51 schreef drm het volgende:
ehmmm over *SLAP* *SLAP* gesproken :*
Returns a string of up to length - 1 bytes read from the file pointed to by fp. Reading ends when length - 1 bytes have been read, on a newline (which is included in the return value), or on EOF (whichever comes first). If no length is specified, the length defaults to 1k, or 1024 bytes.
:P
Pagina: 1