我有一个每天通过FTP手动上传的文件。该文件是一个JSON对象,将通过FTP自动用于在数据库中插入/更新记录。
我正在使用ftp_nb_get()将内容获取到本地临时文件,但是一段时间后它随机失败。我现在使用的JSON文件的长度约为250.000行,保存内容的临时文件有时约为20k,有时我得到的最多40,70,80k约为110k行。 >
尝试ftp_nb_fget,ftp_nb_get,ftp_fget,仍然出现一些随机故障。我尝试使用set_time_limit(500000);为了确保脚本不会超时,php.ini中的内存限制也很高。这是在Laravel上完成的,php版本是7.2。
但是,连接是通过ftp_ssl_connect()建立的,因此不确定SSL部件是否更难以维护连接,或者...通过ftp_pasv()启用被动模式
所以,这是代码失败的地方:
$local_file = storage_path() . '/app/temp.tmp';
$data = fopen($local_file, 'w');
$list = ftp_nlist($ftp_conn, 'import/*'.Carbon::now()->format('Ymd').'*.json');
$import = ftp_nb_fget($ftp_conn, $data, $list[0], FTP_ASCII);
while ($import == FTP_MOREDATA)
$import = ftp_nb_continue($ftp_conn);
$content = file_get_contents($local_file);
unlink($local_file);
因此,结果应该是格式正确的JSON,但是我在$ content或temp文件中得到的是未完成的文件,该文件停止在完全随机的行号上。