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?
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
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