Как я могу запускать php-скрипт одновременно?

#php #curl #concurrently

#php #curl #одновременно

Вопрос:

Я хочу запустить этот фрагмент кода одновременно. В каталоге есть текстовый файл с именем id.txt где все параметры заменяются в файле cookie в заголовках ниже. Если я запускаю это, открывая 10 вкладок cmd, процесс замедляется. Поэтому, пожалуйста, помогите мне, как я могу запустить это одновременно или какие-либо ваши предложения

 $i=trim(file("index.txt")[0]) 0;
$id=file("id.txt")[$i];
$idd=preg_replace('/s /', '', $id);
file_put_contents("index.txt",$i 1);
echo $idd;  
while(true){

$url8 = "https://www.example.com/";
$header= array("Accept: text/html,application/xhtml xml,application/xml;q=0.9,image/webp,*/*;q=0.8",
                 "Accept-Language: en-US,en;q=0.5",
                 "Content-Type: application/x-www-form-urlencoded",
                 "Content-Length: 0",
                 "Cookie: $idd");

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url8);
curl_setopt($ch, CURLOPT_HTTPHEADER,$header);
curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:81.0) Gecko/20100101 Firefox/81.0");
curl_setopt($ch, CURLOPT_HEADER,1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_NOBODY, 1);
$out = curl_exec($ch);
echo "n";
echo $currentTime = date( 'h i s', time () );
if(preg_match('/done/',$out)){
    die(' done');   
}
}
 

Комментарии:

1. вместо использования curl вы заинтересованы в использовании guzzlehttp для обработки ваших запросов, тогда вы можете использовать guzzle для одновременной отправки запросов.

2. @bhucho вместо того, чтобы потреблять процессор и ресурсы, вы могли бы использовать curl_multi_* , php.net/manual/en/function.curl-multi-init.php

3. @YvesLeBorg Я использовал curl multi, но некоторые запросы не обрабатывались.

4. @bhucho пожалуйста, помогите мне, как я могу это сделать через guzzlehttp 🙂

5. для этого есть несколько требований: сначала вам нужен composer (чтобы вы могли установить guzzle), затем вам нужно выполнить composer init, он инициализирует файл composer.json, а затем добавляет пакет guzzle, используя его. Сообщите, выполнили ли вы uptil этот шаг.

Ответ №1:

Как я вижу, это происходит медленно, потому что все экземпляры запускаемого вами скрипта обращаются к одному и тому же файлу одновременно, поэтому при получении дескриптора, необходимого для доступа к файлу, возникает задержка. Вы должны использовать разные имена файлов (например. index1.txt , index1337.txt ) и избегайте записи в один и тот же файл с несколькими экземплярами.

Надеюсь, мой ответ помог 🙂

Комментарии:

1. Затем я должен сохранить cookie в другом текстовом файле? но для этого требуется слишком много времени, а затем извлекать его в cookie в заголовках.