【发布时间】:2017-01-05 10:45:05
【问题描述】:
我有一个脚本,我可以在其中创建一个新文件并构建一个 .CSV 文件
$name = $_POST['file_name'];
$file = fopen('path/to/file_'.$name.'.csv','w');
$line = '"first_value","second_value"'...;
fwrite($file, $line."\n");
此脚本嵌入在 MAMP 服务器网站中,因此用户可能会在浏览器中打开第一个选项卡并调用此脚本,然后在同一浏览器中打开第二个选项卡并并行启动相同的脚本。我所期望的是,由于两个文件不同,文件写入应该并行完成,但情况恰恰相反:
它等待第一次写入完成,然后开始创建第二个文件。
我该如何解决这个问题?
【问题讨论】:
-
PHP 是单线程的!还有更合适的方法来创建 CVS 文件。 php.net/manual/en/function.fputcsv.php
-
@Justinas - 虽然每个单独的请求都应该在自己的线程中运行
-
你是如何验证你的假设的?
-
@DanFromGermany 我正在创建的 CSV 文件需要几秒钟才能完成(例如 2.000.000 行),因此如果要并行创建,则应创建两个文件(开头为空)和然后每一个都填满;但是只有在第一个 CSV 完成时才创建第二个 CSV(空)...
-
@Justinas 是的,但我希望浏览器的每个选项卡都是不同的线程,或者如果从选项卡中这是错误的,我可以从另一个选项卡访问变量