Avatar billede svinth Nybegynder
21. april 2013 - 14:53 Der er 5 kommentarer og
1 løsning

PHP fclose => "Undefined variable: script"

Hej PHP eksperter.

Jeg har et gammelt script, der er blevet flyttet fra en gammel server, til en nyere. Jeg har allerede rettet:

if ($fp=fopen ($url, 'x')) {

, til

if ($fp=fopen ($url, 'w')) {

, for at få den del til at virke. Det kode snippet der ikke virker er:

$url = "ftp://".$ftpuser.":".$ftppswd."@".$D.$slash.$httpdocs.($Path ? $Path.$slash : "").$websitesID.$slash.$webpagesFilename;

ini_set('track_errors','On');
if ($fp=fopen ($url, 'w')) {
  $page_html = "<br>test<br>";   
  if (!fwrite($fp,stripslashes(stripslashes($page_html)), 1000000)) {
    echo "Write fail";
    var_dump($php_errormsg);
  }
  echo $fp;
  fclose($fp);
  echo "<br>Closing";
  var_dump($php_errormsg);
  exit();
}

Output'et fra dette er:

Resource id #26
Closingstring(26) "Undefined variable: script"

Filen der skal skrives til ender med at være 0 bytes stor. Den eksisterer ikke i forvejen. Det er fordi den med succes er blevet omdøbt lidt forinden, med:

if($conn_id = ftp_connect($D))
{
    if (ftp_login($conn_id, $ftpuser, $ftppswd))
    {
      @ftp_rename ( $conn_id, $httpdocs.($Path ? $Path.$slash : "" ).$websitesID.$slash.$webpagesFilename, $httpdocs.($Path ? $Path.$slash : "" ).$websitesID.$slash.$webpagesFilename.".bak" );
    }
    ftp_close($conn_id);
}

Så ftp_login, ftp_rename og ftp_close virker.
Jeg kan ikke forstå "Undefined variable: script" fejlen, og kan intet finde om den via google.

Er der en der forstår denne fejlbesked?

Mvh fra Svante
Avatar billede moddi100 Seniormester
21. april 2013 - 15:13 #1
Fejlbeskeden henviser til noget der er sket tidligere end den kode du har vist os. Der er altså ikke tale om en fejl idet du kalder fclose();

Men har du tjekket indholdet af $page_html ? Derudover bør du angive den korrekte længde af indholdet fremfor en høj værdi, når du skriver:
if (!fwrite($fp,stripslashes(stripslashes($page_html)), 1000000)) {

skal være
if (!fwrite($fp,stripslashes(stripslashes($page_html)))) {
Avatar billede svinth Nybegynder
21. april 2013 - 16:13 #2
Det har du fuldstændig ret i! Det var bare en lille fejl. Rart med andre øjne på, som man dog kan stirre sig blind.

Det er som sagt et gammelt script, og jeg tror max længden på omtrent en MB er angivet af pladshensyn. Jeg har dog ændret det til strlen($page_html) nu. Data fyldte dog kun i dette tilfælde 12-13 KB. Dette var dog ikke fejlen, den fandt jeg ganske rigtigt i indholdet af $page_html. Som en del af header genereringen indsattes:

$header .= "<META NAME='REVISIT-AFTER' CONTENT='5 days>\n";

Bemærk den manglende afslutnings ' , der på en eller anden måde får resten til at fejle. Efter jeg fik tilføjet et ' mere, ser det ud til at virke. Da det som sagt er et gammelt script, vil jeg undlade at undre mig over det, og så bare glæde mig over at det virker.

Smid lige et svar, pointene er velfortjente!

Svante
Avatar billede svinth Nybegynder
21. april 2013 - 16:32 #3
Og dog, det er tilsyneladende et timing problem.

Hvis jeg smider:

echo htmlspecialchars($page_html);

ind lige inden min fwrite SÅ virker det :)

På den igen!
Avatar billede moddi100 Seniormester
21. april 2013 - 21:12 #4
#3 det må du lige uddybe?
Avatar billede svinth Nybegynder
22. april 2013 - 15:42 #5
#3 uddybning:

Hvis jeg ikke har et delay inden fwrite, så ender filen med at være 0 bytes stor.

Da jeg ikke har tid til at debugge det gamle kode, har jeg simpelthen indsat en sleep(3); på linien inden fwrite, og nu gemmes filen korrekt hver gang :)

Det er langt fra perfekt, men det er en funktionel og nem løsning.
Avatar billede moddi100 Seniormester
22. april 2013 - 22:51 #6
Hmm det skal jeg ikke kunne sige, det lyder lidt mystisk. Men godt at du fik det til at virke.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester