2012-12-11 7 views
5

ho incontrato un problema di recente in cui, durante i periodi di traffico elevato per la mia domanda, piccoli file CSV vengono inviati con l'arricciatura/FTP con zero byte. Tuttavia, quando visualizzo il file sul mio filesystem posso vedere che non è sicuramente vuoto e non ha dimensioni pari a zero byte.i file vengono trasmessi con PHP cURL/FTP zero byte

Questo è il mio codice PHP:

$ch = curl_init(); 
$fp = fopen($bFile, 'r'); 
curl_setopt($ch, CURLOPT_URL, 'ftp://'.FTP_SERVER .'/'.FTP_DIRECTORY.$file_name); 
curl_setopt($ch, CURLOPT_USERPWD, FTP_USER.':'.FTP_PASS); 
curl_setopt($ch, CURLOPT_UPLOAD, 1); 
curl_setopt($ch, CURLOPT_INFILE, $fp); 
curl_setopt($ch, CURLOPT_INFILESIZE, filesize($bFile)); 
curl_setopt($ch, CURLOPT_FTP_USE_EPSV, false); 
curl_exec($ch); 

Ho anche qualche errore di base relative alla gestione del codice in cui ricciolo restituisce un errore:

if (curl_error($ch)) { 
    throw new Exception("File could not be sent via FTP: " . curl_error($ch)); 
} 

Tuttavia, rilevo in questo esempio non c'è occasione in cui viene generata l'eccezione e l'esecuzione del codice continua.

Ci sarebbe qualche ragione per cui ho un, diciamo, un file CSV 5Kb sul mio filesystem, ma il server FTP a cui sto inviando il file ha solo un file di byte zero? Ciò indica un problema di trasmissione, probabilmente causato da un traffico elevato in questo periodo dell'anno?

+0

suona come un vero e proprio orso risolvere i problemi. Prendi in considerazione l'aggiunta di punti log prima e dopo la chiamata 'curl_exec'? Hai installato [l'estensione FTP] (http://php.net/book.ftp)? È più fastidioso da usare, ma potresti essere in grado di persuaderti degli errori migliori. – Charles

+0

Sì, è un problema scomodo da risolvere poiché non sta accadendo su tutti i file o anche su quelli più frequenti. È come 1 file in 500 o anche più. – crmpicco

risposta

2

Poiché ne parli durante il traffico intenso. È possibile che ci sia molta o attività di lettura/scrittura sui file CSV che stai tentando di inviare? Forse è il fopen che in realtà fallisce e quindi stai inviando 0 byte, ma con il nome file corretto. Questo genererebbe solo un avvertimento quindi non verrà catturato.

Forse si dovrebbe aggiungere un po 'di registrazione per i diversi valori si sta inviando con curl, come filesize($bFile) e $fp

+0

I file CSV vengono creati, scritti e quindi cancellati da uno script (lo stesso che lo invia), quindi non penso che ci sarà molta attività di lettura/scrittura sul file. Quindi registrare la dimensione del file del file è un buon punto, penso che dovrò farlo. – crmpicco

+0

Ho aggiunto in un controllo come questo 'if (filesize ($ bFile) == false o filesize ($ bFile) == '0') {' e 'if ($ fp === false) {' per verificare se 'fopen' sta fallendo, quindi vedremo se è possibile restringere il problema inviando file vuoti. – crmpicco