2017-01-05 5 views
0

У меня есть сценарий, где я создаю новый файл и создать CSV-файлзаписи файлов сериализовать в PHP

$name = $_POST['file_name']; 
$file = fopen('path/to/file_'.$name.'.csv','w'); 
$line = '"first_value","second_value"'...; 
fwrite($file, $line."\n"); 

Этот скрипт встроен в веб-сайт MAMP сервера так что это может быть возможно, что пользователь открывает первую вкладку в браузере и вызывает этот скрипт, а затем вторую вкладку в том же браузере и запускает тот же скрипт параллельно. Я бы ожидал, что, так как два файла отличаются друг от друга, запись файла должна выполняться параллельно, но это происходит так:

Он ждет первого окончания записи и начнет создание второго файла.

Как это исправить?

+0

PHP однопоточный! Также существует более правильный способ создания CVS-файла. http://php.net/manual/en/function.fputcsv.php – Justinas

+1

@Justinas - хотя каждый отдельный запрос должен работать в своем потоке –

+0

Как именно вы подтверждаете свою гипотезу? – DanFromGermany

ответ

0

Из комментариев я заключаю следующее.

  1. Это не имеет смысла. PHP ждет, когда первый файл будет записан, когда файлы не совпадают. Это будет другой случай («Блокировки файлов»).

  2. Имеет смысл, что браузер действительно ждет, когда у вас есть несколько вкладок в один и тот же ресурс/домен, что он обязательно получит хотя бы один байт ответа, пока он не начнет запускать другие запросы.

При попытке что-то вроде этого, вы должны либо использовать разные компьютеры, или использовать консоль в сочетании с завитком или Wget (или PHP/скрипт Баш!) Без кэширования.

+0

Да, на самом деле, чтобы избежать этого, я использую разные браузеры, но я должен проверить свое приложение на большом количестве одновременного доступа, а также тот факт, что я мог бы использовать браузер так же, как 1. Это большая проблема :) –

+0

I не знаю cURL и wget, но кажется, что они могут фактически загрузить файл с сервера, а не создавать его на сервере ... Или, может быть, есть известное мне использование? –

+0

@FrankB. «Загрузить» означает «сделать запрос и сохранить ответ локально». С помощью этих инструментов вы можете сделать запрос к URL-адресу, который создает файл для вас (запрос клиента на сервер). Нет необходимости сохранять ответ. – DanFromGermany