как установить новый php parallel (7.2+) в окнах и, возможно, на wampserver
Новый php parallel. он новый, и нигде не существует устранения неполадок, и единственная документация по нему - это сам php.net, которого недостаточно.
вот что я сделал:
установил последнюю версию WAMP(3.1.9 x64).
установил последнюю версию PHP(7.3.9) на WAMP.
добавлен PHP в путь к системной среде Windows.
в папку PHP добавлен файл pthreadVC2.dll.
добавлен pthreadVC2.dll в путь к системной среде Windows.
добавлен php_parallel.dll в каталог php/ext.
добавлено extension=php_parallel к php.ini.
перезапустил все.
<?php
# this is my code
$runtime = new \parallel\Runtime();
$future = $runtime->run(function(){
for ($i = 0; $i < 50; $i++)
echo "$i";
return "easy";
});
for ($i = 0; $i < 50; $i++) {
echo ".";
}
часов потрачено. теперь Windows cmd говорит:
"Неустранимая ошибка: Неперехваченная ошибка: класс 'parallel\Runtime' не найден в...[адрес моего файла]",
а wampserver говорит: "Соединение было сброшено (ошибка firefox)" только на странице, которую я использую параллельно \Runtime и другие страницы работают нормально.
И, пожалуйста, со всем уважением, не помечайте мой вопрос как общий или какие-либо другие, если вы просто не знаете ответа. хотя бы покажи мне несколько ссылок.
4 ответа
Насколько я могу судить, для установки расширения из библиотеки.dll, предоставленной PECL, необходимо соответствие между вашим расширением и вашей сборкой PHP, найденными в phpinfo()
:
- Версия PHP: Найдено в
PHP Version
- Thread Safe: найдено в
PHP Extension Build
(TS= потокобезопасный или NTS= небезопасный поток) - Версия компилятора: Найдено в
PHP Extension Build
(например: VS15 или VS16) - x86 против x64: найдено в
Architecture
В репозитории PECL для параллельного использования существуют две версии, которые будут работать со следующими сборками PHP:
- php_parallel-1.1.3-7.3-ts-vc15-x64.zip: PHP 7.3, Threadsafe, VC15, x64
- php_parallel-1.1.3-7.3-ts-vc15-x86.zip: PHP 7.3, Threadsafe, VC15, x86
Учитывая ограниченные сборки parallel
, ваша сборка PHP должна быть: 7.3+, TS и VC15. Еще раз убедитесь, что это действительно так, посмотрев на свойphpinfo()
, а также убедитесь, что вы используете x64
версия (поскольку вы сказали, что ваш PHP - x64).
Правильный ответ - сообщение JS_Riddler (датированное 3 декабря 2019 года и отредактированное Т. Тодуа), но я хотел уточнить для пользователей Windows.
Перед установкой в командной строке, если вы выполните «php -v», вы можете увидеть что-то вроде:
PHP 7.3.33 (cli) (built: Nov 16 2021 14:49:44) ( ZTS MSVC15 (Visual C++ 2017) x64 )
Не позволяйте "(Visual C++ 2017)" сбить вас с толку... важно "ZTS MSVC15", указывающее на потокобезопасную сборку и библиотеку времени выполнения.
Также обратите внимание на основной и дополнительный номера версии: «7.3» в приведенном выше примере. Номер сборки (например, третье число, в примере «33») не имеет значения.
А также обратите внимание на архитектуру: в примере "x64".
Основная версия, второстепенная версия и архитектура должны совпадать с версией параллельной версии, которую вы загружаете, поэтому для приведенного выше примера вы захотите загрузить
php_parallel-1.1.4-7.3-ts-vc15-x64.zip
Примечание: после скачивания и распаковки параллельного архива:
- скопируйте файл php_parallel.dll в php/ext/php_parallel.dll
- скопируйте pthreadsVC2.dll в php/pthreadsVC2.dll
- добавьте «extension=parallel» где-нибудь в вашем php.ini в отдельной строке.
вы должны иметь возможность запускать «php -v» из командной строки. Если вы получили сообщение об ошибке, еще раз проверьте, что php.exe (и pthreadsVC2.dll) находится в вашем PATH и что версия php_parallel.dll, которая у вас есть в папке php/ext, соответствует основной и дополнительной версиям вашего исполняемого файла php.
Еще одно замечание: многие хостинговые компании не используют ZTS-версию php, поэтому кажется, что в настоящее время это расширение в основном предназначено для приложений разработки CLI. Не пытайтесь писать производственный код, который полагается на него, если вы не знаете, что ваш целевой хост поддерживает его.
Журнал ошибок оказался заставкой.
PHP Startup: Failed to load .../php/php7.4.9/ext/pthreadVC2, The system cannot find the file ..
Затем я просто удалил .dll из имени файла, а затем он дал:
PHP Startup: Invalid library (maybe not a PHP library) 'pthreadVC2' in Unknown on line 0
Таким образом, вам может потребоваться заменить файл другой версией, пока вы не найдете правильную версию.
ПРИМЕЧАНИЕ: я обнаружил интересную вещь, так это то, что она работает в CLI.
У меня была такая же проблема. Также скопировал файл pthreadVC2.dll в папку ext. Когда я переместил этот файл из папки, он заработал нормально.
Папки:
- yourPhpFolder / pthreadVC2.dll
- yourPhpFolder / ext / php_parallel.dll