Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [curl ?] sprawdzenie obecności pliku na serwerze zdalnym
macek
post
Post #1





Grupa: Zarejestrowani
Postów: 84
Pomógł: 0
Dołączył: 17.08.2006
Skąd: łódź

Ostrzeżenie: (0%)
-----


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 (IMG:http://forum.php.pl/style_emoticons/default/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

Ten post edytował macek 28.07.2007, 12:27:51
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 3)
Kicok
post
Post #2





Grupa: Zarejestrowani
Postów: 1 033
Pomógł: 125
Dołączył: 17.09.2005
Skąd: Żywiec

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post
macek
post
Post #3





Grupa: Zarejestrowani
Postów: 84
Pomógł: 0
Dołączył: 17.08.2006
Skąd: łódź

Ostrzeżenie: (0%)
-----


oo, zdaje się że dokładnie o to mi chodziło (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) jak mnie z pracy wypuszczą to przetestuję, dzięki (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
mario
post
Post #4





Grupa: Zarejestrowani
Postów: 186
Pomógł: 0
Dołączył: 23.09.2003
Skąd: Siemianowice Śląskie

Ostrzeżenie: (0%)
-----


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. ?>
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 23.08.2025 - 18:52