Napotkałem ostatnio problem, w którym podczas okresów dużego ruchu do mojej aplikacji wysyłane są małe pliki CSV z cURL/FTP z zerową liczbą bajtów. Jednak gdy przeglądam plik na moim systemie plików, widzę, że nie jest on na pewno pusty i nie ma zera bajtów.Pliki przesyłane za pomocą PHP cURL/FTP z zerowym bajtem
To jest mój kod 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);
Mam też pewne podstawowe obsługi błędów w kodzie gdzie cURL zwraca błąd:
if (curl_error($ch)) {
throw new Exception("File could not be sent via FTP: " . curl_error($ch));
}
Ja jednak zauważyć w tym przykładzie nie jest przypadek, w którym wyjątek jest generowany i wykonywanie kodu jest kontynuowane.
Czy istnieje jakikolwiek powód, dla którego mam, powiedzmy, plik CSV o wielkości 5 KB w moim systemie plików, ale serwer FTP, do którego wysyłam plik, ma tylko plik o rozmiarze zero bajtów? Czy to wskazuje na problem z transmisją, być może spowodowany przez ruch o dużej wartości o tej porze roku?
Brzmi jak prawdziwy niedźwiedź rozwiązywać. Rozważ dodanie punktów logowania przed i po wywołaniu 'curl_exec'? Czy masz zainstalowane [rozszerzenie FTP] (http://php.net/book.ftp)? Jest bardziej denerwujący w użyciu, ale możesz wyciągnąć z niego lepsze błędy. – Charles
Tak, rozwiązywanie problemów jest niezręczne, ponieważ nie ma to miejsca w przypadku każdego pliku lub nawet często. To jak 1 plik na 500 lub więcej. – crmpicco