Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [curl ?] sprawdzenie obecności pliku na serwerze zdalnym
Forum PHP.pl > Forum > PHP
macek
jak w temacie, potrzebuję sprawdzić z poziomu php czy plik na zdalnym serwerze istnieje. Problem nie jest już tak banalny jak dodam że odpadają funkcje file_exists() i sockety smile.gif
Próbowałem przez curl:
  1. <?php
  2. $url = DecodeUrl( $_GET['url'] );
  3. $ch = curl_init( $url );
  4. curl_setopt( $ch, CURLOPT_CONNECTTIMEOUT, 5 );
  5. if( curl_exec( $ch ) ) {
  6. echo '0';
  7. }
  8. else {
  9. echo '1';
  10. }
  11. ?>

lub
  1. <?php
  2. $url = DecodeUrl( $_GET['url'] );
  3.  $ch = curl_init( $url );
  4. curl_setopt( $ch, CURLOPT_RETURNTRANSFER, 1 );
  5. $foo = curl_exec( $ch );
  6.  if( !$ch ) {
  7.  echo '1';
  8.  }
  9.  else {
  10.  echo '0';
  11.  }
  12. ?>

, ale przy założeniu że pliki mogą mieć nawet po 20 mb to też nie daje rady. Skrypt wykonuje się za długo..
Funkcja DecodeUrl() zmienia adres do normalnej postaci http://ascda.sada/dsad/ ( np. *.exe, wcześniej zmieniam specjalne znaki, żeby puścić url w gecie jako parametr.. )
Może przedstawię też problem: tworzę cms z programami do ściągnięcia, w panelu chcę klientowi zrobić przycisk sprawdzający czy link do programu (serwer zewnętrzny) jest poprawny (czy plik istnieje), robię to przez ajaxa, lecz samo sprawdzenie odbywa się na poziomie php, dlatego też umieściłem temat na forum php
Kicok
Przy pomocy opcji CURLOPT_RANGE i CURLOPT_HEADER napisz skrypt, który pobierze z serwera tyle danych, by można było odczytać status, np:
Kod
HTTP/1.1 200 OK

czy
Kod
HTTP/1.1 404 Not Found
macek
oo, zdaje się że dokładnie o to mi chodziło smile.gif jak mnie z pracy wypuszczą to przetestuję, dzięki smile.gif
mario
widze ze temacik jest juz wiekowy ale byc moze przyda sie komus rowniez tak jak i ja szukalem i znalazlem odpowiedz, ponizej kod ktory znalazlem w sieci

  1. <?php
  2. function processURL($url)
  3. {
  4.  $ch=curl_init();
  5.  curl_setopt($ch, CURLOPT_URL, $url);
  6.  curl_setopt($ch, CURLOPT_RANGE, "0-4096");
  7.  curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); // return to var
  8.  curl_setopt($ch, CURLOPT_FAILONERROR, 1); // dont hang
  9.  curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); // allow redirects
  10.  curl_setopt($ch, CURLOPT_TIMEOUT, 3); // time out after 3s
  11.  curl_setopt($ch, CURLOPT_HEADER, 0);
  12.  
  13.  $data = curl_exec ($ch);
  14.  curl_close ($ch);
  15.  
  16.  echo $data;
  17.  return $data;
  18. }
  19. ?>
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.