remote file exists

Door Ron -, 21 jaar geleden, 6.509x bekeken

Ik heb heel lang gezocht naar een functie die controleerd of externe bestanden bestaan.
"Vroeger" werd dit voornamelijk met fopen() gedaan, echter deze functie wordt steeds vaker op servers geblokkeerd ivm veiligheid.
CURL kan ook gebruikt worden, maar geeft een html waarschuwing, dit is vaak niet gewenst.

Na lang zoeken, heb ik deze functie gevonden, heb ik dus niet zelf geschreven.
Ik post hem omdat, denk ik, meer mensen hem goed kunnen gebruiken.


(bron http://www.php.net/manual/en/function.fsockopen.php#39948)

Gesponsorde koppelingen

PHP script bestanden

  1. remote-file-exists

 

Er zijn 20 reacties op 'Remote file exists'

PHP hulp
PHP hulp
0 seconden vanaf nu
 

Gesponsorde koppelingen
Gerben Jacobs
Gerben Jacobs
21 jaar geleden
 
0 +1 -0 -1
Wij kunnen zelf ook wel naar de PHP handleiding surfen. Althans, dat neem ik aan.
Ron -
Ron -
21 jaar geleden
 
0 +1 -0 -1
zeg toch ook niet van niet, maar bij mij duurde t heel lang voordat ik deze functie had gevonden, ik probeer gewoon te helpen door de functie hier te posten

niet iedereen denkt direct aan fsockopen, ik dus ook niet, en dan kom je niet zo 1 2 3 bij deze functie uit
Wessel Johnson
Wessel Johnson
21 jaar geleden
 
0 +1 -0 -1
Ziet er goed uit, hier was ik al een tijdje naar opzoek thx
GaMer B
GaMer B
21 jaar geleden
 
0 +1 -0 -1
Ondanks dat het in de PHP handleiding staat, vind ik het best wel een goede aanvulling voor de script library.
Henk
Henk
21 jaar geleden
 
0 +1 -0 -1
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
<?php
    function file_remote_exists ( $sLink )
    {

        return (bool) @file_get_contents ( $sLink );
    }

?>
:-) Alstublieft dankuwel
Hipska BE
Hipska BE
21 jaar geleden
 
0 +1 -0 -1
wat bedoel je met "cURL geeft html waarschuwing"?
cURL is gewoon een opgewaardeerde versie van socketopen...
Ron -
Ron -
21 jaar geleden
 
0 +1 -0 -1
als je doet:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
<?php
$ch
= curl_init("http://www.example.com/iets_wat_niet_bestaat.jpg");
curl_exec($ch);
?>

dan krijg je een html pagina met NOT FOUND erop, dus geen FALSE of 0 terug, wat wel handig is
Hipska BE
Hipska BE
21 jaar geleden
 
0 +1 -0 -1
en dan doe je gewoon
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
<?php

    // ... hier komt de vorige code

    return (curl_exec($ch) == "NOT FOUND");
}

?>

Of iets gelijkaardig
Ron -
Ron -
21 jaar geleden
 
0 +1 -0 -1
dat werkt niet.. moet je maar eens proberen

als je t toch werkend krijg, hoor ik graag hoe :)
Hipska BE
Hipska BE
21 jaar geleden
 
0 +1 -0 -1
ik zei "Of iets gelijkaardigs"

Lees eens de manual van php.net door, met name het stuk over cURL.

Ik weet zeker dat het veel zal verschillen in code, want ik heb er al een iDisk connectie class mee gemaakt en was begonnen met sockets, maar met cURL was het echt veel minder werk.
Ron -
Ron -
21 jaar geleden
 
0 +1 -0 -1
ik heb het al grotendeels doorgelezen, maar nergens zoiets gevonden, kan dat ik het over het hoofd heb gezien
Henk
Henk
21 jaar geleden
 
0 +1 -0 -1
Ron, wat vind je van mijn oplossing?
Ron -
Ron -
21 jaar geleden
 
0 +1 -0 -1
goed, als je met file_remote_exists de functie die ik gepost heb bedoel

dit is handig als je het bestand ook moet weergeven, maar dat is bij mij niet nodig, ik moet alleen weten of het bestaat of niet
Steff   an
Steff an
21 jaar geleden
 
0 +1 -0 -1
@Henk.. of moet ik zeggen Boris

Quote:
You can use a URL as a filename with this function if the fopen wrappers have been enabled. See fopen() for more details on how to specify the filename and Appendix O, List of Supported Protocols/Wrappers for a list of supported URL protocols.

'Jouw' functie gaat dus niet altijd werken.
Wim Mari
Wim Mari
21 jaar geleden
 
0 +1 -0 -1
@Henk:
Als de pagina niet bestaat retourneerd de webserver een 404-error pagina, incl een 404 error ipv een 200 OK-code. PHP zal nog altijd denken dat de pagina bestaat aangezien hij content terugkrijgt!

Deze heb ik een tijdje geleden gemaakt:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
<?php
function remote_file_exists ($domein, $path, $port = 80, $get = false)
{

    $path = (substr($path, 0, 1) != '/') ? '/'.$path : $path;
    
    $sock = fsockopen($domein, $port, $errno, $errstr, 5); //5s timeout
    if (!$sock)
        return false;
    
    $cmd = ($get === true) ? "GET ".$path." HTTP/1.1\r\n" : "HEAD ".$path." HTTP/1.1\r\n";
    $cmd .= "Host: ".$domein."\r\n";
    $cmd .= "Connection: Close\r\n\r\n";
    
    fwrite($sock, $cmd);
    $output = NULL;
    while (!feof($sock))
        $output .= fgets($sock, 128);
    
    fclose($sock);
    
    if(preg_match('#HTTP/1.1 200 OK#', $output))
        return true;
    else
        return false;
}[
/code]
Rik
Rik
19 jaar geleden
 
0 +1 -0 -1
kijk, dit wil ik nou zien, gewelig!!

erg bedankt!

normaalgesproken doe ik geen moeite om een reactie achter te laten, maar hier ben ik heel erg blij mee...

nogmaals bedankt!!


Rik
Igor PortalPressDOTorg
Igor PortalPressDOTorg
17 jaar geleden
 
0 +1 -0 -1
@Henk file_get_contents is een heel onbetrouwbare functie op remote files. Hij kan 20x goed werken en plots krijg je enkele malen errormeldingen, waarna het weer werkt. Verder, zoals gezegd, werkt je functie simpelweg niet zoals het hoort. Tip : Streamen.

@Ron en Hipska. Curl is niet altijd beschikbaar. Dus die functies zijn ook niet voor algemeen gebruik geschikt.

@Wim. Deze ziet er alweer wat beter uit, maar ook die functie is niet, wat het zou moeten zijn. Waarom gebruik je preg_match, als strpos veel sneller is? Verder moet je gewoon 200 OK afvragen en niet volledig HTTP/1.1 200 OK. Daarbovenop werkt de functie niet altijd. Een tip : Gebruik parse_url. En vergeet domein en path; gooi de hele bende ernaartoe.

Tip : Gebruik delen van de functie van topicstarter Ron en die van Wim en wijzig preg_match naar strpos. Dan pas heb je een betrouwbare functie, die nog snel is ook.

Groetjes, Igor
Jurrian Nijland
Jurrian Nijland
17 jaar geleden
 
0 +1 -0 -1
Igor? Waarom reageer je op een script dat al een paar jaar oud is, en waarvan de laatste reactie van 2 jaar geleden is? Het heeft geen zin meer om hier op te reageren. Waarschijnlijk is het al verouderd.


17 jaar geleden
 
0 +1 -0 -1
Waarom reageer jij nog op een reactie van twee dagen terug, Jurrian? Als je niet reageerde zou dit script vast zo weer verdwijnen.
PHP hulp
PHP hulp
0 seconden vanaf nu
 

Gesponsorde koppelingen
Igor PortalPressDOTorg
Igor PortalPressDOTorg
17 jaar geleden
 
0 +1 -0 -1
Nou nou @Jurrian. Maak jij uit, wat zin en geen zin heeft? Verder gebruik je de term : Waarschijnlijk. Als je het niet zeker weet, waarom plaats je dan zo'n post? Of heb jij een ultranieuwe, snellere oplossing? Ik zie die dan gaarne tegemoet. Verder is preg_match aardig nieuw ten overstaande van strpos, maar zo snel een naaktslak; nieuwer is dus echt niet altijd beter. Dan nog iets; wist je dat al van die onbetrouwbare file_get_contents? Als laatste; ik heb deze post niet voor jou geplaatst, maar voor geinteresseerde lezers. Verspandeer je tijd aan nuttige posten, zou ik zeggen.

Groetjes, Igor

Om te reageren heb je een account nodig en je moet ingelogd zijn.

Inhoudsopgave

  1. remote-file-exists

Labels

  • Geen tags toegevoegd.

Navigatie

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.