Eroare failed to open stream - In exemplu din carte PHP 4

Discutii despre script-uri si coduri PHP-MySQL, precum si lucru cu XML in PHP.
Alex03
Mesaje: 7

Eroare failed to open stream - In exemplu din carte PHP 4

Salutări
Sunt începător în PHP şi mă confrunt cu problema de mai sus. Este vorba despre un contor pentru numărul de deschideri ale unei pagini, şi este luat din cartea lui Bill McCarty - PHP 4, Editura Teora, 2002. Codurile sunt următoarele:

Primul fişier denumit "contor" salvat cu extensia .php:

Cod: Selectaţi tot

<?php
$PHP_SELF=$_SERVER['PHP_SELF'];        //Declararea variabilei am făcut-o eu, pt. că în carte nu era, sper că e bine
$cfile= basename($PHP_SELF) . ".dat";
$fh= fopen($cfile, "r+");
if (!$fh) {
  die ("<br/>Nu a fost deschis fisierul <i>$cfile</i>.");
}  
$s= fgets($fh, 6);
$count= (int) $s;
$count= $count + 1;
$count= str_pad($count, 6);
rewind ($fh);
fwrite($fh, $count);
echo "$count";
fclose($fh);
?>
Şi al doilea denumit "contor-test", salvat cu extensia .php:

Cod: Selectaţi tot

<html>
<head>
<title>Contor-test.php</title>
</head>
<body>
Aceasta pagina a fost deschisa de <b>
<?php include "contor.php"?>
</b> ori.
</body>
</html>
În carte se specifică, crearea unui fişier ".dat", pe care l-am creat dintr-un fişier text, schimbându-i extensia în .dat şi pe care l-am plasat în acelaşi folder, denumindu-l "contor-test".
Când execut al doilea fişier în webserver primesc următoarul avertisment:

Cod: Selectaţi tot

Warning: fopen(contor-test.php.dat): failed to open stream: No such file or directory in (calea fişierului)\contor.php on line 4
De asemenea în carte este ascuns acest avertisment prin intermediul caracterului @ la linia:

Cod: Selectaţi tot

$fh= fopen($cfile, "r+");
, în faţa lui fopen.

Aşadar îmi rămâne:

Cod: Selectaţi tot

Aceasta pagina a fost deschisa de 
Nu a fost deschis fisierul contor-test.php.dat.
Întrebarile mele sunt : De ce nu poate deschide fişierul? Îi trebuie o permisiune specială PHP-ului? Cum verific dacă are permisiune sau nu? Din ce am înteles i-ar trebui o permisiune 755 (rwxr-xr-x).
Mulţumesc anticipat pt. ajutor!

MarPlo Mesaje: 4343
Salut
In primul rand, daca inveti de pe o carte de acum 12 ani, php 4, e gresit si vei da peste o multime de erori si nefunctionalitati. Sunt multe modificari, fuctii anulate si imbunatariri in versiuniile php 5+, majoritatea serverelor au deja php 5.2 +, si codurile pe care le inveti nu vor merge.
Revenind la problema, eroarea spune exact ca nu gaseste acel fisier; cauza, acest cod:

Cod: Selectaţi tot

$cfile= basename($PHP_SELF) . ".dat"; 
Rezulta in:

Cod: Selectaţi tot

$cfile = 'contor-test.php.dat';
- Observi ca e si extensia ".php", iar acel fissier ".dat" probabil e creat: "contor-test.dat".

Recomandare:
- Daca in acel fisier salvezi doar text normal, nu te complica cu extensia ".dat", ci lasa ".txt" (iti va fi mai usor sa-l deschizi pentru verificare).
- Adauga direct adresa /numele fisierului, mai ales ca esti la inceput, pastreaza lucrurile simple.

Cod: Selectaţi tot

$cfile= 'contor-test.txt'; 
- Invata din manualul php (php.net) si carte cu php 5.3+ (aparute in 2013 /2014).

Alex03 Mesaje: 7
Mulţumesc mult pt. soluţie! E ok acum!
Ai dreptate, cartea este veche şi foarte multe exemple de acolo nu au funcţionat. A trebuit să le aduc câte o modificare pe aici, pe colo la proiectele de la finalul lecţiilor... în general , declararea variabilelor. Am ales să o citesc pt că era tradusă în limba română (nu-i bai mă descurc şi cu engleza, dar ştii cum e, în limba ta e mult mai simplu de înţeles) şi nu mi-am dat seama că este făcută după o versiune veche a php-ului. Mi-am dat seama abia când m-am lovit de nefuncţionarea proiectelor din modulele 4 şi 5 :lol: .

Am văzut că lecţiile de pe site-ul tău sunt inspirate din ea. Sincer, după ele mă ghidez şi îmi conspectez zilnic. Şi pe calea asta vreau să îţi mulţumesc pentru adaptarea exemplelor din carte, aici pe site. M-au ajutat mult să înţeleg modul de funcţionare la PHP-ului.
O să continui cu lecţiile de pe site, aruncând un ochi şi pe carte pt. orice informaţie suplimentară.

Mai ai nişte recomandări concrete de cărţi recente despre PHP 5 traduse în lb. română, sau în engleză, dar să fie uşor de înţeles cu exemple funcţionale? Mulţumesc încă o dată!


L.E.: Mersi pt. ultimele link-uri. O să aprofundez "Learning PHP, MySQL, JavaScript, CSS, HTML5 - 3rd Edition" :)

MarPlo Mesaje: 4343
Poti incerca aceasta carte: Learning PHP, MySQL, JavaScript, CSS & HTML5, 3rd Edition (in engleza, pdf e-book si fisiere php cu exemplele din ea [treci usor peste ce cunosti deja]), sau altele de la adresa:
Download PHP - MySQL resources

Succes.

Subiecte similare