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

    Invio variabili con post

    Salve a tutti,
    questo è il mio primo post. Premetto che è solo da qualche giorno che mi sono avvicinato a php e devo dire che ne sono già molto colpito.
    Veniamo al mio probolema.
    Ho la necessità di inviare delle variabili tramite "post" ad una pagina php che risiede in un altro sever, in modo automatico.
    L'utente si collega alla pagina mioserver/pagina.php che in automatico invia le variabili tramite post a altroserver/pagina2.php.
    Usando questo codice mi ritorna un errore di pagina non trovata. Cosa sbaglio o come posso fare?


    function PostRequest($url, $referer, $_data) {

    // convert variables array to string:
    $data = array();
    while(list($n,$v) = each($_data)){
    $data[] = "$n=$v";
    }
    $data = implode('&', $data);
    // format --> test1=a&test2=b etc.

    // parse the given URL
    $url = parse_url($url);
    if ($url['scheme'] != 'http') {
    die('Only HTTP request are supported !');
    }

    // extract host and path:
    $host = $url['host'];
    $path = $url['path'];

    // open a socket connection on port 80
    $fp = fsockopen($host, 80);

    // send the request headers:
    fputs($fp, "POST $path HTTP/1.1\r\n");
    fputs($fp, "Host: $host\r\n");
    fputs($fp, "Referer: $referer\r\n");
    fputs($fp, "Content-type: application/x-www-form-urlencoded\r\n");
    fputs($fp, "Content-length: ". strlen($data) ."\r\n");
    fputs($fp, "Connection: close\r\n\r\n");
    fputs($fp, $data);

    $result = '';
    while(!feof($fp)) {
    // receive the results of the request
    $result .= fgets($fp, 128);
    }

    // close the socket connection:
    fclose($fp);

    // split the result header from the content
    $result = explode("\r\n\r\n", $result, 2);


    $header = isset($result[0]) ? $result[0] : '';
    $content = isset($result[1]) ? $result[1] : '';

    //print $content;
    // return as array:
    return array($header, $content);
    }

    $data = array(
    'variabile1' => '1',
    'variabile2' => '2',
    'variabile3' => '3'
    );

    list($header, $content) = PostRequest(
    "http://altroserver/pagina2.php",
    "http://mioserver",
    $data
    );
    print $content;

  2. #2
    Ciao.
    Ma l'errore te lo da perché non trova mioserver/pagina.php oppure l'errore te lo da quando cerchi di aprire la connessione oppure quando cerchi di contattare pagina2.php via socket?

    Un consiglio. Fai dei controlli sulle istruzioni che usano il socket. Ad es.

    // open a socket connection on port 80
    $fp = fsockopen($host, 80);

    l'apertura del socket se non va a buon fine restituisce FALSE,

    quindi:

    if ($fp === FALSE)
    {
    die('Errore di apertura socket');
    }


    Lo stesso per fputs che ritorna FALSE in caso di errore.

  3. #3
    Se voglio stampare il risultato con "print $content" mi da pagina non trovata HTTP 404.
    Ho controllato inviando la risposta al mio db che lo script da come risposta 200 quindi in teoria i dati dovrebbero essere stati inviati.
    Ma non succede quello che succede quando i dati li invio da un semplice form.
    Invio i dati con submit mi ritorna una pagina dall'altro server che i dati sono stati inviati.
    Se tolgo print $content la pagina ci mette un pò a caricare e non succede niente.
    Sembra che ci sia qualche errore nell'invio dei dati. Ho messo i die come consigliato e non mi da errore.
    Nell'array dove inserisco le variabili, i numeri devo metterli tra ' ' giusto così come le stringhe?
    '254552' e anche 'pippo' non fa differenza se numero o stringa?

  4. #4
    Originariamente inviato da DanieleMiatello
    Nell'array dove inserisco le variabili, i numeri devo metterli tra ' ' giusto così come le stringhe?
    '254552' e anche 'pippo' non fa differenza se numero o stringa?
    $data = array(
    'variabile1' => '1',
    'variabile2' => '2',
    'variabile3' => '3'
    );

    Se variabile1 è ad esempio $pippo allora non devi usare gli '':

    $data = array($pippo => '1', $variabile2 => '2', $variabile3 => '3');

    se invece metti tu a meno l'indice dell'array e ad esempio è la stringa prova allora

    $data = array('pippo' => '1', $variabile2 => '2', $variabile3 => '3');

    Per quanto riguarda, invece, i valori che assegni agli indici, se scrivi 1 senza apici è interpretato come un numero, altrimenti come una stringa. Ma non è questo il problema.


    Dimmi se ho capito bene.
    In mioserver/pagina.php hai il codice che hai postato, in cui viene aperta una connessione via socket ad altroserver e qui si inviano i dati via post a pagina2.php

    Giusto?

    print non fa altro che visualizzare a video il contenuto di una stringa, quindi è come se scrivessi
    echo $content;

    quindi non è quello il problema.

    Altro consiglio. Non ti andare ad impelegare usando per fare varie cose sempre la stessa var.le.
    Ad es.

    $data = implode('&', $data);

    è inutile che usi di nuovo $data

    usa al limite una dicitura del genere:

    $dati_invio = implode('&', $data);

    In questo modo concettualmente ciascuna var.le contiene le sue informazioni.

    Prova nella funzione PostRequest
    a mettere nelle funzioni per il socket a mettere tu a mano il contenuto delle var.li

    es.: $fp = fsockopen($host, 80);
    al posto di $host metti tu a mano il nome dell'host così come anche in fputs


    Ho visto che nella tua funzione c'è:

    //print $content;

    decommentandola ti dà errore?

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.