Visualizzazione risultati 1 fino 4 di 4

Discussione: $_server['http_referer']

  1. #1
    kairos2020 non è connesso Utente giovane
    Data registrazione
    16-04-2020
    Residenza
    Castegnato (BS)
    Messaggi
    59

    Predefinito $_server['http_referer']

    Buongiorno, la seguente riga di codice :
    $mio= parse_url($_SERVER['HTTP_REFERER'])
    blocca pa pagina del sito e produce un errore HTPError 500.
    In locale e in altre pagine in remoto non mi crea alcuna problema,è possibile dipenda dalle impostazioni del server altervista?
    Grazie per l'attenzione.

    Mauro

  2. #2
    GraphOGLRisorse non è connesso AlterGuru 2500
    Data registrazione
    14-02-2015
    Messaggi
    4,681

    Predefinito

    Salve,
    in realtà il messaggo non è un error ma un warning. ovvero un'avvertenza. La risposta 500 con blocco eseguzione è relativa alla configuarzione server di AlterVista.

    Con PHP 7.x si ha un messaggio di tipo notice di questo tipo:
    Notice: Undefined index: HTTP_REFERER in /home/user/scripts/code.php on line 14
    Con PHP 8.x si ha un messaggio di tipo warning di questo tipo:
    Warning: Undefined array key "HTTP_REFERER" in /home/user/scripts/code.php on line 14
    Per evitarlo, bisogna aggiungere un controllo:
    Codice PHP:
    $mio = parse_url($_SERVER['HTTP_REFERER'] ?? '');
    inoltre, il valore restituito da parse_url() è un erray. Se si vuole però recuperarlo come stringa, va convertito.
    Codice PHP:
    $mio = join(", ", parse_url($_SERVER['HTTP_REFERER'] ?? ''));
    Cordiali saluti.
    Ultima modifica di GraphOGLRisorse : Oggi alle ore 17.04.53

  3. #3
    kairos2020 non è connesso Utente giovane
    Data registrazione
    16-04-2020
    Residenza
    Castegnato (BS)
    Messaggi
    59

    Predefinito

    GraphOGLRisorse, grazie per la rapida ed esauriente risposta.
    In locale utilizzo come server AMPPS con php 8.2, con error_reporting(E_ALL)e non ricevo alcun warning, anche se leggendo il manuale di PHP la mia sintassi in effetti è sbagliata. In locale correttamente tratto la risposta come array leggendo l'indice 'host' che + poi il dato di mio interesse.
    Grazie ancora per la completa risposta

    Mauro

    Ho fatto una prova con la sintassi suggerita:
    in Altervista è
    array(1) { ["path"]=> string(0) "" }, quindi quando leggo l'indice HOST ovviamente ho un errore
    in locale è:
    array(3) { ["scheme"]=> string(4) "http" ["host"]=> string(9) "127.0.0.1" ["path"]=> string(1) "/" }
    Ho letto che questa funzione può avere comportamenti 'strani' cercherò nel manuale PHP il modo corretto di leggere
    il valore di host.
    Grazie
    Ultima modifica di kairos2020 : Oggi alle ore 17.35.53

  4. #4
    GraphOGLRisorse non è connesso AlterGuru 2500
    Data registrazione
    14-02-2015
    Messaggi
    4,681

    Predefinito

    Ma quindi l'intento finale dell'uso di parse_url() è di recuperare l'host dagli URL dei referer?

    Il recupero dell'host da un URL può essere fatto semplicemente così:
    Codice PHP:
    function NomeDominio($url='') {
    $str = strtolower(trim($url));
    $str = preg_replace('/^http:\/\//i', '', $str);
    $str = preg_replace('/^https:\/\//i', '', $str);
    $str = preg_replace('/^www\./i', '', $str);
    $str = explode('.', $str);
    $str = trim($str[0]);
    return
    $str;
    }
    Ad ogni modo, io prima ho risposto sulla base delle imformazione che ha fornito. Non vedendo l'intero codice non posso prevedere eventuali errori altrove nell'intero codice.

    Se vuole, può riportare l'intero codice.

    Comnque differenti configurazioni tra AMPPS in locale ed i server AlterVIsta, possono tal volta compoetare comportamenti incongrenti. Così come l'uso di differenti versini di PHP.

    Edit:
    Mi sorge un dubbio... L'url che le serve recuperare è quella corrente dove esegue lo script?

    In tal caso, è corretto che HTTP_REFERER su AlterVista restituisca "". HTTP_REFERER viene valorizzato con l'url di provenienza da un asltro sito non con quello corrente. Per ottenere quello corrente va usato REQUEST_URI.

    Codice PHP:
    echo $_SERVER['REQUEST_URI'];
    I sistemi che emulano i server in locale, tal volta possono avere comportamenti ingannevoli rispetto ai servere veri. Il comportamento di AMPPS che valorizza HTTP_REFERER come se fosse REQUEST_URI non è esattamente un errore lato suo, ma non è corretto in riferimnto a PHP su server.

    Cordiali saluti.
    Ultima modifica di GraphOGLRisorse : Oggi alle ore 18.38.52

Regole di scrittura

  • Non puoi creare nuove discussioni
  • Non puoi rispondere ai messaggi
  • Non puoi inserire allegati.
  • Non puoi modificare i tuoi messaggi
  •