În cazul în care suntem nevoiţi să redăm o listă de fişiere, astfel încât să le putem accesa prin intermediul linkului, este recomandabil să fie afişate linkurile respective, doar dacă fişierele există.
Varianta universală
Astfel, în primă fază definim calea spre fişierele respective. Să presupunem, de exemplu, că ar fi vorba de un folder cu nişte pdf-uri. Deoarece este nevoie să ajungem la calea de pe HDD, nu URL-ul, vom folosi variabila $_SERVER[‘DOCUMENT_ROOT’].
|
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 |
<?php $cale="/fisiere/pdfuri/"; // calea pe server $sql = "SELECT * FROM fisiere"; $result = mysqli_query($con,$sql); ?> <table class="tabel"> <tr><th>Spec</th><th><th>Fisierul</th></tr> <?php WHILE ($rd = mysqli_fetch_array($result, MYSQLI_NUM)) { $fisier_exist=$_SERVER['DOCUMENT_ROOT'].$cale.$rd["2"].'.pdf'; if(file_exists($fisier_exist)) { $fisier_url='<a href="'.$cale.$rd["2"].'.pdf'.'" target="_blank"><i class="fa fa-file-pdf-o"></i> '.$rd["2"].'</a>'; } else { $fisier_url='-'; } ?> <tr> <td><?php echo $rd["1"] ?></td> <td><?php echo $fisier_url; ?></td> </tr> <?php } echo '</table>'; mysqli_free_result($result); mysqli_close($con); ?> |
Şi totuşi…
Dacă am menţionat mai sus că cea mai la îndemână metodă este folosind funcţia file_exists(), doar că este necesară o nuanţare: dacă calea fişierului este un link simbolic către un fișier care nu există, file_exists() va returna true, deoarece linkul în sine există. Pentru a creşte precizia rezultatului, pot fi folosite funcţii precum:
is_readable()șiis_writable()pentru a verifica dacă scriptul PHP are permisiunile necesare pentru a accesa fișierul.is_file()pentru a verifica dacă un nume de cale specifică un fișier regulat, nu un director sau un link simbolic.
filetype()pentru a determina dacă un fișier este un fișier regulat, un director, un link simbolic etc.
De asemenea, s-ar putea să fie necesară curăţarea cache-ului sistemului de fișiere pentru a obține rezultate precise. Un alt aspect ar putea să presupună verificarea căii complete; trebuie să ne asigurăm că acea cale către fișier este absolută și corectă. Desigur, funcţia error_reporting() poate afișa toate erorile și avertizările, ceea ce poate ajuta la identificarea problemelor.
Un exemplu, folosind funcţiile is_file() şi is_readable():
|
1 2 3 4 5 |
if (is_file($filename) && is_readable($filename)) { echo 'Fișierul există și este accesibil pentru citire.'; } else { echo 'Fișierul nu există sau nu are permisiunile necesare.'; } |
Sursa: shorturl.at/mwFW7, w3Schools.com
