Problema del trasferimento file fra server

  • Creatore Discussione Creatore Discussione mikall
  • Data di inizio Data di inizio

mikall

Nuovo Utente
29 Gen 2010
3
0
0
Buona sera, chiedo alla comunità di Mr.WebMaster perchè dopo aver usato tutto il mio bagaglio di conoscenze e abbondanti ricerche in rete
oltre che l'assistenza del mio fornitore di hosting non risco a risolvere!

Devo semplicemente prelevare un file da un indirizzo internet
e scriverlo in locale sul mio server. Lo script che ho scritto funziona
in locale, funziona sul server di tophost, non funziona sul server di aruba (dove invece dovrei mettere lo script).

Il non funziona vuol dire che il file viene trasferito correttamente ma ci sono i seguenti sintomi:

1)Nessun echo viene visualizzato
2)La pagina finito il download mostra un

Gateway Time-out
The gateway did not receive a timely response from the upstream server or application.

stesso errore compare nei log dei server, anzi leggendo il log
Timeout waiting for output from CGI script /web/htdocs/www.. indirizzo dello script.

posto anche lo script che è piccolo..

<?php
//Directory del sorgente
$src_rep_win="http://www.threebestdogs.com/wp-content/gallery/aidi/";
//File win del giorno
$file_win="aidi03.jpg";
//Cartella di destinazione
$dest_rep_win="";

//time to limit
$ttl=500;

function save_nightly_build($src_rep,$dest_rep,$file) {
//Copia i file da remoto
set_time_limit($ttl);
//Controllo che il file non esista già
if(!file_exists($dest_rep.$file)){
//apro il file remoto da leggere
$srcfile = fopen($src_rep.$file, "r");
//apro il file in locale
$flocal = fopen($dest_rep.$file,"w");
//scrivo il contenuto del file remoto, in file locale
while ($contents = fread( $srcfile, 8192)) {
fwrite( $flocal, $contents, strlen($contents) );
}
//chiudo i due files
fclose($srcfile);
fclose($flocal);
}
}

save_nightly_build($src_rep_win,$dest_rep_win,$file_win);

?>

Se qualcuno sapesse aiutarmi.. gli sarei grato. Aruba risponde che ogni script ha un tempo di esecuzione di 120 secondi, cosa che non è del tutto vera perchè con set_time_limit($ttl); lo script ha tutto il tempo di copiare i file che mi servono fino anche a 50 MB e dura 5-7 minuti.

Strano che però su questo hosting qualunque echo in qualunque punto del codice non si visualizzi... forse è un problema di connessione http.. di header... brancolo nel buio!!!

Grazie, buona serata,
 
Sembrerebbe che lo script vada in timeout. È una cosa strana. Prova ad aumentare il time_limit e poi prova ad aprire l'URL manualmente, per vedere se magari non è successo qualcosa con il server che ospita il file.
 
Eppure lo script termina la sua esecuzione.
Solo che ho l'impressione.. che resti "appeso".
Ho aumentato il time to limit.. anche se già basta quello che c'è..
ma non cambia nulla.
Il server che ospita il files sta bene.
Su altro hosting funziona...

Ho riscritto ad aruba.. se per loro va bene riempiersi i log di errori..
io lo uso!
 
Il gateway timeout sembra corrispondere all' HTTP Status Code 504 di cui la specifica spiega che :
Il server, in attesa su una connessione con un gateway o proxy, non ha ricevuto una risposta nel tempo massimo impostato a cui era collegato
Quindi piu o meno è come dici tu, rimane 'appeso', pero il server che sta prelevando il file non termina lo script poichè scaduto il tempo per scaricare il file da un altro server lancia l'http status code 504, di conseguenza tronca lo script e non esegue nessuna echo. Infatti su TopHost magari questo tempo e molto piu alto che su aruba e quindi funziona, cosi come ti succede in locale. Inoltre non c'entra niente la funzione php :
PHP:
set_time_limit($ttl);
che imposta il tempo di esecuzione dello script ma non il tempo massimo di connessione fra un server e l'altro, quindi non serve a risolvere il problema. Naturalmente questa è una mia supposizione potrebbe non essere cosi :D
 
Si, la penso anch'io così.
Il fatto è che il download del file termina correttamente.
Vorrei solo capire come inserire del codice per dire allo script di chiudere la connessione con il server remoto e vedere se cambia qualcosa.

Diciamo "forzare" la chiusura della connessione visto che il tempo per fare il download è sufficiente.

Delle idee su come farlo sono sempre gradite...

Ciao!
 

Discussioni simili