2012-12-11 19 views
5

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?

+0

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

+0

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

Odpowiedz

2

Od kiedy wspomniałeś o tym podczas dużego natężenia ruchu. Czy jest możliwe, że istnieje wiele operacji odczytu/zapisu na plikach CSV, które próbujesz wysłać? Być może jest to fopen, który faktycznie zawodzi, a zatem wysyłamy 0 bajtów, ale z poprawną nazwą pliku. To generuje tylko ostrzeżenie, więc nie zostanie złapany.

Być może trzeba dodać trochę rejestrowanie do różnych wartości wysyłanych z curl, jak filesize($bFile) i $fp

+0

Pliki CSV są tworzone, zapisywane i usuwane za pomocą jednego skryptu (tego samego, który je wysyła), więc nie sądzę, aby w pliku było dużo operacji odczytu/zapisu. Dlatego logowanie się do rozmiaru pliku jest dobrym punktem, myślę, że będę musiał to zrobić. – crmpicco

+0

Dodałem w takim teście 'if (filesize ($ bFile) == false lub filesize ($ bFile) == '0') {' i 'if ($ fp === false) {' aby sprawdzić czy 'fopen' nie działa, więc zobaczymy, czy to może ograniczyć problem do wysyłania pustych plików. – crmpicco

Powiązane problemy