Forfatter Emne: fopen/fwrite  (Læst 5579 gange)

0 Medlemmer og 2 Gæster læser dette emne.

Offline plarsen

  • Senior wannabe
  • **
  • Indlæg: 32
fopen/fwrite
« Dato: 25-01-2009 18:24:11 »
Hej,

Jeg får en underlig fejl når jeg åbner en fil for skrivning.
Jeg ved der bruges safe_mode på serveren, men jeg får ingen stream fejl under åbningen - filen oprettes med størrelsen 0.

    if (!$file = fopen($filename, 'wb') ) {
      die('Error ....'); }

Det er først når jeg skriver til filen, at den fejler.
Og fejlen er blot at der ikke kommer noget i filen. Jeg tester kun på at der er skrevet noget, ikke hvor meget.

    if (!fwrite($file, $datastream, $datatreamlength)) {
      die('Error writing...'); }

Jeg har 2 sites på netplads.dk, det ene fejler med den klassiske safe_mode fejl, hvor der kun kan skrives til filen hvis den allerede eksisterer og det andet er dette site jeg beskriver her.

Nogen ide til hvad det kan være ?
Kan man overhovede få fopen/fwrite til at virke når serveren kører i safe_mode ??

På forhånd tak for hjælpen.

Mvh
Peter

Offline Calzone

  • Blackbriar Operative
  • Administrator
  • DNS god
  • ******
  • Indlæg: 10.638
  • Color for the colorblind!
    • Mine film...
Sv: fopen/fwrite
« Svar #1 Dato: 25-01-2009 18:31:00 »
Hele koden tak...
Greetings
Calzone AKA David Webb.

Offline plarsen

  • Senior wannabe
  • **
  • Indlæg: 32
Sv: fopen/fwrite
« Svar #2 Dato: 25-01-2009 18:36:01 »
...testkode kommer her ind fra højre:

    $picturestream = stripcslashes( $_POST['picturestream'] );
    $picturestream = str_replace("{(pL)}", chr(0), $picturestream);
    $picturename = stripcslashes( $_POST['picturename'] );
    $picturestreamlength = $_POST['picturestreamlength'];
    //

    header("HTTP/1.0 500 Internal Server Error"); //set as error
    if (!$file = fopen($picturename, 'wb') ) {
      die('Error opening file for writing picture'); }
    if (!fwrite($file, $picturestream, $picturestreamlength)) {
      die('Error writing picture to file'); }
    if (!fclose($file)) {
      die('Error closing picture file'); }
   header("HTTP/1.0 200 OK");
    echo "200 OK";

Offline Calzone

  • Blackbriar Operative
  • Administrator
  • DNS god
  • ******
  • Indlæg: 10.638
  • Color for the colorblind!
    • Mine film...
Sv: fopen/fwrite
« Svar #3 Dato: 25-01-2009 18:50:46 »
Hvordan ser formen for $_POST['picturestream'] indput ud?
Greetings
Calzone AKA David Webb.

Offline plarsen

  • Senior wannabe
  • **
  • Indlæg: 32
Sv: fopen/fwrite
« Svar #4 Dato: 25-01-2009 19:28:16 »
Jeg tænkte først at det ikke kan have noget med formen at gøre, når det virker på et andet site på web2.
Og for at vise det, lavede jeg noget test kode:

    header("HTTP/1.0 500 Internal Server Error"); //set as error
    if (!$file = fopen("bitmapfiles/testfile.txt", 'wb') ) {
      die('Error opening file for writing picture'); }
    if (!fwrite($file, "sdjkhfsdakjfhsdjkh", 10)) {
      die('Error writing picture to file'); }
    if (!fclose($file)) {
      die('Error closing picture file'); }

Men det virker faktisk.
Der kom 10 bytes i filen.

Hvad er det du mistænker der kan være galt med data-stream'en ??

/Peter

Offline Calzone

  • Blackbriar Operative
  • Administrator
  • DNS god
  • ******
  • Indlæg: 10.638
  • Color for the colorblind!
    • Mine film...
Sv: fopen/fwrite
« Svar #5 Dato: 25-01-2009 19:29:24 »
Er vi enige om at du uploader en fil eller, det er vi måske ikke?
Greetings
Calzone AKA David Webb.

Offline plarsen

  • Senior wannabe
  • **
  • Indlæg: 32
Sv: fopen/fwrite
« Svar #6 Dato: 25-01-2009 19:40:12 »
Jeg poster en almindelig http stream til en php side på sitet ja !

Offline Calzone

  • Blackbriar Operative
  • Administrator
  • DNS god
  • ******
  • Indlæg: 10.638
  • Color for the colorblind!
    • Mine film...
Sv: fopen/fwrite
« Svar #7 Dato: 25-01-2009 19:42:17 »
Hvis:
header("HTTP/1.0 500 Internal Server Error"); //set as error
    
if (!$file fopen("bitmapfiles/testfile.txt"'wb') ) {
      die(
'Error opening file for writing picture'); }
    if (!
fwrite($file"sdjkhfsdakjfhsdjkh"10)) {
      die(
'Error writing picture to file'); }
    if (!
fclose($file)) {
      die(
'Error closing picture file'); }

virker, så er det din form den er gal med.
Greetings
Calzone AKA David Webb.

Offline plarsen

  • Senior wannabe
  • **
  • Indlæg: 32
Sv: fopen/fwrite
« Svar #8 Dato: 25-01-2009 19:55:36 »
Ja det undre mig også at det virker, for serveren kører jo safe_mode og jeg troede der var problemer med fopen/safe_mode.

Offline Calzone

  • Blackbriar Operative
  • Administrator
  • DNS god
  • ******
  • Indlæg: 10.638
  • Color for the colorblind!
    • Mine film...
Sv: fopen/fwrite
« Svar #9 Dato: 25-01-2009 20:24:31 »
Nej, fopen og safe_mode har intet med hinanden at gøre...
Greetings
Calzone AKA David Webb.

Offline plarsen

  • Senior wannabe
  • **
  • Indlæg: 32
Sv: fopen/fwrite
« Svar #10 Dato: 25-01-2009 20:54:28 »
Jeg har været så fokuseret på permissions fordi jeg i starten fik nogle "open stream errors" v/fopen. Derfor kom jeg ikke rigtigt videre.

Det er nu lykkedes mig at overføre billeder op til 18 kb.
50 kb kommer ikke over (jeg kan se at $picturestream er tom). Ved fejl smidder jeg hele indholdet fra $picturestream i retur bodyen.

Er der nogen begrænsning i hvor meget jeg kan sende til sitet ?
Ellers er der kun encodingen tilbage - men så skulle det også være et problem ved de små billeder.

/Peter

Offline Calzone

  • Blackbriar Operative
  • Administrator
  • DNS god
  • ******
  • Indlæg: 10.638
  • Color for the colorblind!
    • Mine film...
Sv: fopen/fwrite
« Svar #11 Dato: 25-01-2009 23:31:38 »
Greetings
Calzone AKA David Webb.

Offline plarsen

  • Senior wannabe
  • **
  • Indlæg: 32
Sv: fopen/fwrite
« Svar #12 Dato: 26-01-2009 10:41:14 »
Jeg har ikke kontrol over hvordan afsender poster data - data modtages blot i bodyen i formatet key=value.
Om jeg kan bruge $_FILES på det, ved jeg ikke, men vil da prøve at se hvad, der kommer ud af det.

Men jeg forstår stadig ikke hvorfor den anden metode ikke længere virker - det har kørt fint i 5 år - både på linux og windows platforms  (?) !

Offline Calzone

  • Blackbriar Operative
  • Administrator
  • DNS god
  • ******
  • Indlæg: 10.638
  • Color for the colorblind!
    • Mine film...
Sv: fopen/fwrite
« Svar #13 Dato: 26-01-2009 10:44:05 »
Kom med din form og hele denne diskution er slut:D
Greetings
Calzone AKA David Webb.

Offline plarsen

  • Senior wannabe
  • **
  • Indlæg: 32
Sv: fopen/fwrite
« Svar #14 Dato: 26-01-2009 11:04:38 »
Tak for din hjælp - jeg tvivler dog, men tak ;.)
Har du en email jeg kan smide det på ??

Offline Calzone

  • Blackbriar Operative
  • Administrator
  • DNS god
  • ******
  • Indlæg: 10.638
  • Color for the colorblind!
    • Mine film...
Sv: fopen/fwrite
« Svar #15 Dato: 26-01-2009 11:06:41 »
Du kan smide det i en pm, og jeg tvivler ikke, sender du filer skal det gøres via $_FILES ellers kommer du i op og slås med maximum headers.
Greetings
Calzone AKA David Webb.

Offline plarsen

  • Senior wannabe
  • **
  • Indlæg: 32
Sv: fopen/fwrite
« Svar #16 Dato: 26-01-2009 11:26:36 »
Tro mig, hvis jeg havde source-koden, ville jeg lave det om til ftp.
Men uanset hvad det ender med, kan det kun fixes hvis jeg kender årsagen.

Du nævnte "maximum headers", men headeren bliver ikke større, kun bodyen - findes der også en begrænsning dér ??
Når du siger formen, mener du så afsenders post data, eller modtagers php script ?

Offline Calzone

  • Blackbriar Operative
  • Administrator
  • DNS god
  • ******
  • Indlæg: 10.638
  • Color for the colorblind!
    • Mine film...
Sv: fopen/fwrite
« Svar #17 Dato: 26-01-2009 12:15:44 »
Den HTML form der poster den data du gemmer.
Greetings
Calzone AKA David Webb.

Offline plarsen

  • Senior wannabe
  • **
  • Indlæg: 32
Sv: fopen/fwrite
« Svar #18 Dato: 26-01-2009 15:23:07 »
Der findes ingen html form, det er en exe fil.
Jeg spørger igen - findes der en begrænsning på hvor stor bodyen må være ??

Offline Calzone

  • Blackbriar Operative
  • Administrator
  • DNS god
  • ******
  • Indlæg: 10.638
  • Color for the colorblind!
    • Mine film...
Sv: fopen/fwrite
« Svar #19 Dato: 26-01-2009 19:02:30 »
Nu er det header du tester på når der bruges $_POST, og dem er der grænser på.
Greetings
Calzone AKA David Webb.

Offline plarsen

  • Senior wannabe
  • **
  • Indlæg: 32
Sv: fopen/fwrite
« Svar #20 Dato: 26-01-2009 20:16:06 »
Det er en $_POST og ikke $_GET, der bruges.
Data ligger i bodyen og ikke i URI'en.

Offline plarsen

  • Senior wannabe
  • **
  • Indlæg: 32
Sv: fopen/fwrite
« Svar #21 Dato: 26-01-2009 21:03:19 »
Således ser headeren ud:

POST /databaseupdate.php HTTP/1.0
Date: Monday, 26-Jan-09 20:37:04 GMT
Host: www.domain.dk:80
User-Agent: Homepage Update/1.2.2.256 (Own; Plan-Data)
Cache-Control: no-cache, must-revalidate
Pragma: no-cache
Content-type: application/x-www-form-urlencoded
Content-Length: 126924

Og derefter følger bodyen, men den er væk når den kommer frem (hvis den er større end omkring 50k).
Jeg får ingen fejl - alt er ok, men data mangler.

Offline Calzone

  • Blackbriar Operative
  • Administrator
  • DNS god
  • ******
  • Indlæg: 10.638
  • Color for the colorblind!
    • Mine film...
Sv: fopen/fwrite
« Svar #22 Dato: 26-01-2009 21:07:55 »
Det er en $_POST og ikke $_GET, der bruges.
Data ligger i bodyen og ikke i URI'en.
Hvem nævner GET? Jeg snakker $_FILES...
Greetings
Calzone AKA David Webb.

Offline plarsen

  • Senior wannabe
  • **
  • Indlæg: 32
Sv: fopen/fwrite
« Svar #23 Dato: 26-01-2009 21:11:35 »
Hvorom alting er....
Data leveres i bodyen (snifferen viser det), men leveres ikke til modtageren.
Hvorfor kommer de ikke frem ??

Offline Calzone

  • Blackbriar Operative
  • Administrator
  • DNS god
  • ******
  • Indlæg: 10.638
  • Color for the colorblind!
    • Mine film...
Sv: fopen/fwrite
« Svar #24 Dato: 26-01-2009 23:34:58 »
Læs nu bare det link til PHP manualen du har fåët, der skal ikke være fil data i $_POST, det skal være fra datasteamen som findes via $_FILES, evt se $_SERVER['HTTP_RAW_POST_DATA'] for hvad du har i $_POST.
Greetings
Calzone AKA David Webb.