写入文件会使我的程序加载非常慢
Writing in a file make my program load really slowly
我试图在循环中用 fwrite/fputcsv 编写 csv 文件,但是当我使用这些函数时,它们写入第一个文件,然后选项卡无限加载并且不执行任何其他操作。
我知道这些功能是问题所在,因为当我删除它们时,其余代码运行正常。
这是我的代码:
<?php
$auth = '';
$date = getdate(); //Needed for the Trade lists files
$path = array(
'Some_folder/file1.csv',
'Some_folder/file2.csv',
'Some_folder/file3.csv',
'Some_folder/file4.csv'
);//Full path the files need to be in
$file = array(
pathinfo($path[0])['basename'],
pathinfo($path[1])['basename'],
pathinfo($path[2])['basename'],
pathinfo($path[3])['basename']
);//The names the files will have
$fp = array(
fopen($file[0], 'w+'),
fopen($file[1], 'w+'),
fopen($file[2], 'w+'),
fopen($file[3], 'w+')
);// Files that are create by fopen
for($i = 0; $i < 4; $i++) {
fputcsv($fp[$i], $file);
echo 'test';
$size = filesize($path[$i]);
$cheaders = array('Authorization: Bearer ' .$auth.'[Private access token]',
'Content-Type: application/octet-stream',
'Dropbox-API-Arg: {"path":"/'.$file[$i].'", "mode":"add"}');
$ch = curl_init('[Private information]');
curl_setopt($ch, CURLOPT_HTTPHEADER, $cheaders);
curl_setopt($ch, CURLOPT_PUT, true);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
curl_setopt($ch, CURLOPT_INFILE, $fp[$i]);
curl_setopt($ch, CURLOPT_INFILESIZE, $size);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
curl_close($ch);
fclose($fp[$i]);
}
?>
fputcsv 和 fwrite 会写入第一个文件 (file1.csv),但它们会使程序陷入无限加载。控制台什么也没说,因为我无法加载页面,而且我不知道还有什么 try/do。我试图寻找解决方案,不幸的是我没有找到它,所以我在这里。我仍然会寻找遮阳篷,但如果有人有解决方案,我也会接受。
感谢所有愿意提供帮助的人。
编辑: 它终于加载了,但是自大约一个小时前开始加载以来花了很长时间。是不是我做错了什么导致我的程序在文件中写得这么慢?
我建议您将任务分成两部分。首先使用 fopen
在 w
模式下将文件写入您的服务器。写入后,使用另一个循环以 r
模式使用 fopen
读取文件,以便在您的 cURL 中使用以在服务器中上传。使用相同的处理程序进行写入和上传可能会导致滞后问题。
可以用curl_multi_init for handling multiple cURL requests asynchronously. 也是一个post就可以了
我试图在循环中用 fwrite/fputcsv 编写 csv 文件,但是当我使用这些函数时,它们写入第一个文件,然后选项卡无限加载并且不执行任何其他操作。
我知道这些功能是问题所在,因为当我删除它们时,其余代码运行正常。
这是我的代码:
<?php
$auth = '';
$date = getdate(); //Needed for the Trade lists files
$path = array(
'Some_folder/file1.csv',
'Some_folder/file2.csv',
'Some_folder/file3.csv',
'Some_folder/file4.csv'
);//Full path the files need to be in
$file = array(
pathinfo($path[0])['basename'],
pathinfo($path[1])['basename'],
pathinfo($path[2])['basename'],
pathinfo($path[3])['basename']
);//The names the files will have
$fp = array(
fopen($file[0], 'w+'),
fopen($file[1], 'w+'),
fopen($file[2], 'w+'),
fopen($file[3], 'w+')
);// Files that are create by fopen
for($i = 0; $i < 4; $i++) {
fputcsv($fp[$i], $file);
echo 'test';
$size = filesize($path[$i]);
$cheaders = array('Authorization: Bearer ' .$auth.'[Private access token]',
'Content-Type: application/octet-stream',
'Dropbox-API-Arg: {"path":"/'.$file[$i].'", "mode":"add"}');
$ch = curl_init('[Private information]');
curl_setopt($ch, CURLOPT_HTTPHEADER, $cheaders);
curl_setopt($ch, CURLOPT_PUT, true);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
curl_setopt($ch, CURLOPT_INFILE, $fp[$i]);
curl_setopt($ch, CURLOPT_INFILESIZE, $size);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
curl_close($ch);
fclose($fp[$i]);
}
?>
fputcsv 和 fwrite 会写入第一个文件 (file1.csv),但它们会使程序陷入无限加载。控制台什么也没说,因为我无法加载页面,而且我不知道还有什么 try/do。我试图寻找解决方案,不幸的是我没有找到它,所以我在这里。我仍然会寻找遮阳篷,但如果有人有解决方案,我也会接受。
感谢所有愿意提供帮助的人。
编辑: 它终于加载了,但是自大约一个小时前开始加载以来花了很长时间。是不是我做错了什么导致我的程序在文件中写得这么慢?
我建议您将任务分成两部分。首先使用 fopen
在 w
模式下将文件写入您的服务器。写入后,使用另一个循环以 r
模式使用 fopen
读取文件,以便在您的 cURL 中使用以在服务器中上传。使用相同的处理程序进行写入和上传可能会导致滞后问题。
可以用curl_multi_init for handling multiple cURL requests asynchronously.