Visualizzazione dei risultati da 1 a 4 su 4
  1. #1
    Utente di HTML.it L'avatar di Marcolino's
    Registrato dal
    May 2003
    residenza
    Udine
    Messaggi
    3,606

    Ricercare se un URL è reale o non esiste

    Ciao, sto creando una semplice applicazione che mi ritorna ok o nope nel caso un url non sia reale, ma per ora non funziona e non capisco bene il perché, ecco il codice.

    Codice PHP:
    if ( filter_has_varINPUT_GET'url' ) && filter_has_varINPUT_GET'url' ) != '' ) {
        
    $url filter_inputINPUT_GET'url'FILTER_SANITIZE_ENCODED );
        
    $fileHeaders get_headers$url ); 
        
    var_dump$fileHeaders );
        if( 
    strtolower$fileHeaders[0] ) == 'http/1.1 404 not found' ) {
            echo 
    json_encode( array( 'risposta' => 'nope' ));
        }
        else {
            echo 
    json_encode( array( 'risposta' => 'ok' ));
        }

    Ho inserito il var_dump() per capire come mai mi dava sempre OK e ho scoperto che il risultato del var_dump() è null.
    Ho provato con www.goole.it e www.google.pippo ma se esce sempre null è ovvio che la risposta sarà sempre OK.
    Chiaramente la variabile $url riporta il valore passato via GET, è file_headers() che non funziona o non so se c'è qualche impostazione del server che la blocchi ( Altervista per ora con PHP 5 ).

    Al limite se qualcuno ha un'idea migliore per verificare se un url esiste è ben accetta :-)

  2. #2
    Utente di HTML.it L'avatar di .Kurt
    Registrato dal
    Jul 2007
    Messaggi
    654
    1. Guarda bene cosa contiene $url.
    2. Altervista, da quel che ricordo, ha allow_url_fopen disabilitato di default. Prova a fare la richiesta via CURL.
    3. Verificare che la risorsa non restituisca un codice di stato 404 non equivale a dire che la risorsa esiste in tutti gli altri casi. Potrebbe essere una pagina di redirect, o tutta la famiglia di codici 4xx e 5xx. Come vuoi comportarti in quei casi, dipende da cosa ti serve fare. Potrebbe avere più senso controllare che la pagina restituisca un "tutto ok, codice 200".

  3. #3
    Utente di HTML.it L'avatar di Marcolino's
    Registrato dal
    May 2003
    residenza
    Udine
    Messaggi
    3,606
    Quote Originariamente inviata da .Kurt Visualizza il messaggio
    1. Guarda bene cosa contiene $url.
    2. Altervista, da quel che ricordo, ha allow_url_fopen disabilitato di default. Prova a fare la richiesta via CURL.
    3. Verificare che la risorsa non restituisca un codice di stato 404 non equivale a dire che la risorsa esiste in tutti gli altri casi. Potrebbe essere una pagina di redirect, o tutta la famiglia di codici 4xx e 5xx. Come vuoi comportarti in quei casi, dipende da cosa ti serve fare. Potrebbe avere più senso controllare che la pagina restituisca un "tutto ok, codice 200".
    1. l'ho scritto i su gli url che ho passato, uno corretto e l'altro palesemente errato e sono quelli passati, d'altronde se hai notato la risorsa non torna nulla se non si mette qualcosa nel query string.
    2. su alllow_url di AV non so dirti ora, poi vedo se è possibile abilitarla, se che pone dei limiti per connessioni server to server. Comunque ho provato anche in locale dove allow_url_fopen è abilitata e la risposta è stata la stessa di prima, quindi il probleman on sembra essere lì, più probabilmente qui come mi risponde xdebug:

    Warning: get_headers(): This function may only be used against URLs in /var/www/html/GAMERAMA/getURL.php on line 28
    Per quanto riguarda la questione dell'errore 404 piuttosto che della buona riuscita 200, è una buona idea, ma comunque è sempreu n metodo deduttivo e non assoluto. Anche se qualcuno potrebbe decidere di eliminare la homepage e www.sito.com/ mi darebbe senza dubbio errore 404 che poi, potrebbe riportare anche ad una pagina preimpostata per l'errore e quindi un falso negativo, ma ripeto sono errori deduttivi non risolutivi del vero problema di fondo che rimane, come faccio ad usare il solo PHP per fare questa cosa?

  4. #4
    Utente di HTML.it L'avatar di Marcolino's
    Registrato dal
    May 2003
    residenza
    Udine
    Messaggi
    3,606
    Allora ho fatte altre prove, ho scoperto che il problema era altrove, in pratica $url non contiene un url ben formato.
    Questo deve portare sempre il protocollo, avevo pensato invece che fosse predefinito l'http, va be, fesso io.

    Ora funge perfettamente.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.