首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >amphp库在xampp上工作,但不在我的webhoster上工作。

amphp库在xampp上工作,但不在我的webhoster上工作。
EN

Stack Overflow用户
提问于 2020-11-23 21:53:54
回答 1查看 105关注 0票数 0

我想在数组中并行执行域。它只能在xampp上运行,而不能在我的网络主机上运行。为什么?

我使用的是:

https://github.com/amphp/parallel

代码:

代码语言:javascript
复制
<?php

require __DIR__ . '/../vendor/autoload.php';

use Amp\Parallel\Worker;
use Amp\Promise;

$urls = [
    'https://secure.php.net',
    'https://amphp.org',
    'https://github.com',
];

$promises = [];
foreach ($urls as $url) {
    $promises[$url] = Worker\enqueueCallable('file_get_contents', $url);
}

$responses = Promise\wait(Promise\all($promises));

foreach ($responses as $url => $response) {
    \printf("Read %d bytes from %s\n", \strlen($response), $url);
}

?>

错误代码如果我在我的网络主机上运行它:

池中的-1 \f25 Worker -1意外退出,代码为-1\f25 250 -1\f6在-1\f25 vendor/amphp/parallel/lib/Worker/DefaultPool.php -1\f6上的-1\f25 250 -1线路意外退出-1\f25-1\f6池中的-1\f25 Worker -1意外退出,代码为-1\f25 250-1\f6。

致命错误:未捕获/kunden/559288_442/webseiten/webhoster/parallel/vendor/amphp/process/lib/Internal/Posix/Runner.php(88):Amp\Process\Internal\Posix\Runner->generateFds() \进程\进程异常:无法在/kunden/559288_442/webseiten/webhoster/parallel/vendor/amphp/process/lib/Internal/Posix/Runner.php:142堆栈跟踪中列出打开的文件描述符:#0 /kunden/559288_442/webseiten/webhoster/parallel/vendor/amphp/process/lib/Internal/Posix/Runner.php(88):Amp\Process\Internal\Posix\Runner->generateFds() #1 /kunden/559288_442/webseiten/webhoster/parallel/vendor/amphp/process/lib/Process.php(108):Amp\Process\Internal\Posix\Runner->start('{ ('/usr/bin/ph...','',数组,数组) #2内部函数: Amp\Process\Process->Amp\Process{closure}() #3 /kunden/559288_442/webseiten/webhoster/parallel/vendor/amphp/amp/lib/Coroutine.php(67):生成器->current() #4 /kunden/559288_442/webseiten/webhoster/parallel/vendor/amphp/amp/lib/functions.php(96):Amp\Coroutine->__construct(Object(Generator)) #5 /kunden/559288_442/webseiten/webhoster/parallel/vendor/Amp/process/lib/process.php(110):Amp\call(Object(Closure)) #6 /kunden/4在/kunden/559288_442/webseiten/webhoster/parallel/vendor/amphp/parallel/lib/Context/Process.php的202行

EN

回答 1

Stack Overflow用户

发布于 2021-02-08 17:24:24

根据提供的信息,您在web主机的服务器上的用户没有读取Amp读取的路径以查找文件描述符的所需权限。有点疏忽。

据我所知(通过阅读Amp源代码),当你的web主机不支持线程时,创建一个进程是一种最后的手段,这将是所有共享主机提供商的标准。

使用reactphp/filesystem异步读取文件。我已经能够在过去的共享主机上成功地使用它,即使它也创建子进程。幸运的是,它创建它们是这样一种方式,不需要访问通常在共享主机环境中受保护的目录。

代码语言:javascript
复制
<?php

require dirname(__DIR__) . '/vendor/autoload.php';

// With Amp loop;
// $loop = new Amp\ReactAdapter\ReactAdapter((new Amp\Loop\DriverFactory)->create());

// With React EventLoop;
$loop = \React\EventLoop\Factory::create();

$filesystem = \React\Filesystem\Filesystem::create($loop);

// This returns a react/promise, which can be yielded in amp coroutines
$filesystem->file(__FILE__)->getContents()->then(function ($contents) {
    echo $contents, PHP_EOL;
}, function ($e) {
    echo $e->getMessage(), PHP_EOL;
});

// You only need this if you are running outside of an Amp Loop.
$loop->run();

您可以将reactphp/filesystem与amphp/react-adapter配对,以便在两个库之间共享一个循环。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64969809

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档