Jak sprawdzić czy plik istnieje na zewnętrznym serwerze?

bordeux

Aby sprawdzić czy istnieje plik na zewnętrznym serwerze, należy wykonać żądanie HTTP, np. wykorzystując moduł curl. Upewnij się że curl jest włączony php.ini oraz że właściciel serwera z którego korzystasz nie zablokował. Jeśli uruchamiasz aplikację na swoim serwerze, albo na swoim prywatnym komputerze, możesz włączyć moduł curl samemu.

Kod

<?php 
function remote_file_exists($filename) {
   $ch = curl_init($filename);
   curl_setopt($ch, CURLOPT_NOBODY, true);
   curl_exec($ch);
   $response_code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
   curl_close($ch);
   return $response_code === 200;
}

Użycie:

<?php
if (remote_file_exists("http://4programmers.net/templates/NewAge/theme/images/header_left.gif")) {
    echo "Plik istnieje";
}
else { 
    echo "Plik nie istnieje";
}

Wyjaśnienie

Pamiętajmy, że pojęcie "plik" tak na prawdę nie istnieje w domenie HTTP ani infrastruktury sieci. "Plik" to określenie zbioru jednostek alokacji, przypisanej hardlinkiem lub symlinkiem do lokacji w systemie plików. W domenie HTTP oraz infrastruktury sieci możemy jedynie mówić o zasobach, które dlatego że są indetyfikowane przez URL (ang. uniform resource locator), podobnie jak pliki, mogą wyglądać bardzo podobnie. Możemy stworzyć URL który będzie pasował zarówno do pliku w naszym systemie plików, jak i zasób zewnętrzny.

Pamiętajmy jednak, że ostatnecznie nie ma żadnego sposobu odczytania niczego na temat struktury plików servera przez protokół HTTP. Możemy jedynie liczyć, że server obsługujący rządanie przedstawi zasoby HTTP tak jak przedstawiłby je klient FTP, ale nie możemy być tego pewni.

Co to wszystko oznacza? Że łatwo jest zrobić stronę, która na rządanie strona.com/plik.php odpowie plikiem, mimo że tak na prawdę plik.php nie istnieje, zarówno jak łatwo byłoby stworzyć stronę która na rządanie strona.com/inny.php odpowie 404 (brak zasobu), mimo że taki plik istnieje.

  • Do diagnostyki serwerów korzystajmy z protokołów FTP oraz SSH
  • Do komunikacji pomiędzy aplikacjami korzystajmy z HTTP, ale nie oszukujmy się że jesteśmy w stanie w ten sposób uzyskać informacje nt systemu plików
FAQ

1 komentarz

W polskich darmowych hostingach możesz o tym pomarzyć- jest blokowany curl. Jeśli bardzo tego potrzebujesz to na 100mb.com jest to dostępne (tez darmowy hosting).