Visualizzazione dei risultati da 1 a 7 su 7
  1. #1

    Far eseguire uno script php senza inclusione

    Salve a tutti,
    ho davvero cercato molto prima di cominciare a scrivere, molti hanno avuto una necessità simile ma non esattamente la stessa, oppure le soluzioni che ho trovato non mi funzionano. Espongo il problema:

    Ho una pagina.php sul server A che ad un certo punto deve chiamare uno script sul server B, dove sta una base dati.
    Lo script sul server B aggiornerà una tupla alla PROPRIA base dati in base ai parametri passati nell'URL, ad esempio:
    Pagina sul server A chiama "https://ilserverBconIlDatabase.org/funzione.php?persona=Giacomo&anni=20"

    funzione.php aggiunge una tupla al DB e non restituisce niente.

    Non voglio includere lo script nella pagina del server A perché il server A non ha alcun accesso alla base dati, quindi eseguire lo script da A sarebbe inutile.

    Vice versa, mi servirebbe qualcosa che facesse eseguire lo script da B, esattamente come succede se si copincollasse nella barra degli indirizzi la stringa "https://ilserverBconIlDatabase.org/funzione.php?persona=Giacomo&anni=20"

    Ho provato come da guida php online ad implementare il seguente:

    <?php
    // create a new cURL resource
    $ch = curl_init();

    // set URL and other appropriate options
    curl_setopt($ch, CURLOPT_URL, "https://ilserverBconIlDatabase.org/funzione.php?persona=Giacomo&anni=20");
    curl_setopt($ch, CURLOPT_HEADER, 0);

    // grab URL and pass it to the browser
    curl_exec($ch);

    // close cURL resource, and free up system resources
    curl_close($ch);
    ?>

    Forse il fatto che sia https invece di http può creare problemi? Oppure il fatto di passare parametri?
    Ho anche dubbi che non veda proprio la funzione $ch = curl_init()...

    Qualcuno esperto sa qualcosa?
    Libero > imposto
    Lunux > Windows
    Esperanto > lingua del padrone
    Kirek
    (dove > è "maggiore di")

  2. #2
    Utente di HTML.it
    Registrato dal
    Jul 2010
    Messaggi
    719
    Prova qualcosa di più semplice:

    file_get_contents("https://ilserverBconIlDatabase.org/funzione.php?persona=Giacomo&anni=20");

    Il https non dovrebbe influenzare il file_get_contents. Altrimenti puoi provare a sostituire https con http o usare una connessione secure soket layer con fsockopen, quindi con protocollo ssl://.

    http://php.net/manual/en/function.file-get-contents.php



  3. #3
    Grazie Simo.
    fsockopen(..)

    sembra funzionare con siti con il protocollo http. Infatti la stringa che prende in input come Url deve iniziare senza http (poi viene aggiunta in automatico).
    Ad esempio nel seguente codice (che funziona: chiama la pagina di google anche se questa dà un errore a me importa solo la chiamata) è preso quasi "paro paro" dalla documentazione ufficiale, nell'url manca il protocollo:

    codice:
    $fp = fsockopen("www.google.it", 80, $errno, $errstr, 8);
    if (!$fp) {
        echo "$errstr ($errno)
    \n";
    } else {
        $out = "GET / HTTP/1.1\r\n"; // questa ho provato a modificarla in  "GET / HTTPS/1.1\r\n" per il sito https, ma senza gli effetti sperati
        $out .= "www.google.it\r\n";
        $out .= "Connection: Close\r\n\r\n";
        fwrite($fp, $out);
        while (!feof($fp)) {
            echo fgets($fp, 128);
        }
        fclose($fp);
    }
    Vedo che la pagina di google viene richiamata. Se uso https per la mia pagina
    codice:
     
    $fp = fsockopen("https://ilserverBconIlDatabase.org/funzione.php?persona=Giacomo&anni=20", 80, $errno, $errstr, 8);
    ottengo:
    Unable to find the socket transport "https" - did you forget to enable it when you configured PHP? (-439920544)

    ---
    Con function.file-get-contents ottengo l'errore di timeout:

    ... [function.file-get-contents]: failed to open stream: Connection timed out ...
    Libero > imposto
    Lunux > Windows
    Esperanto > lingua del padrone
    Kirek
    (dove > è "maggiore di")

  4. #4
    Utente di HTML.it
    Registrato dal
    Jul 2010
    Messaggi
    719
    $fp = fsockopen("https://ilserverBconIlDatabase.org/funzione.php?persona=Giacomo&anni=20", 80, $errno, $errstr, 8);

    è sbagliato, devi usare protocollo ssl:// come ti avevo già detto.

    Comunque non so come aiutarti. Riprova con il file_get_contents e usa un stream contex modificato. Poi puoi provare a andarci con un browser e vedere la risposta...


  5. #5
    Originariamente inviato da simo22
    $fp = fsockopen("https://ilserverBconIlDatabase.org/funzione.php?persona=Giacomo&anni=20", 80, $errno, $errstr, 8);

    è sbagliato, devi usare protocollo ssl:// come ti avevo già detto.

    Comunque non so come aiutarti. Riprova con il file_get_contents e usa un stream contex modificato. Poi puoi provare a andarci con un browser e vedere la risposta...

    Purtroppo il sito è in https quindi non posso cambiarlo.

    Non so purtroppo cosa sia uno stream context modificato, forse posso informarmi (ho imparato/sto imparando PHP vedendo codice già fatto, ovviamente conoscevo altri linguaggi prima, tipo java e simili).

    Grazie comunque
    Libero > imposto
    Lunux > Windows
    Esperanto > lingua del padrone
    Kirek
    (dove > è "maggiore di")

  6. #6
    Utente di HTML.it
    Registrato dal
    Jul 2010
    Messaggi
    719
    Originariamente inviato da cofra347
    Purtroppo il sito è in https quindi non posso cambiarlo.

    Non so purtroppo cosa sia uno stream context modificato, forse posso informarmi (ho imparato/sto imparando PHP vedendo codice già fatto, ovviamente conoscevo altri linguaggi prima, tipo java e simili).

    Grazie comunque
    Non hai bisogno di cambiare dal server... Basta che cambi dallo script. Il https non è supportato da php di standard, devi sostituire l'https con ssl semplicemente dallo script.
    Comunque per gli stream context vai qui:
    http://www.php.net/manual/en/functio...ext-create.php

    Ti dico di provare a visualizzare https://ilserverBconIlDatabase.org/f...iacomo&anni=20 dal browser e vedere cosa succede, magari puoi fare un debug con firebug, il plugin di firefox. Non so che altro dirti...


  7. #7
    Originariamente inviato da simo22
    Non hai bisogno di cambiare dal server... Basta che cambi dallo script.

    Non so che altro dirti...
    Ciao, pare sia colpa di un firewall nel server che contiene la base dati, per motivi di sicurezza.

    Avevo provato anche a scrivere ssl al posto di https ma non mi funzionava.

    Ora devo accordarmi con chi gestisce il server per vedere se è possibile accedere ma senza abbassare il livello di sicurezza attuale (ancora non ho capito se/come). Vediamo che succede, al limite se ho altre informazioni riscrivo.

    Grazie
    Libero > imposto
    Lunux > Windows
    Esperanto > lingua del padrone
    Kirek
    (dove > è "maggiore di")

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 © 2024 vBulletin Solutions, Inc. All rights reserved.