Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
快速执行多个PHP页面数组的最快方法?_Php_Jquery - Fatal编程技术网

快速执行多个PHP页面数组的最快方法?

快速执行多个PHP页面数组的最快方法?,php,jquery,Php,Jquery,执行许多PHP页面的最快方式是什么。我不需要查看它们(即从任何输出的html中刮取或保留任何信息),但它们需要加载。需要执行每个页面中的PHP代码 我首先开始做的是foreach(…){echo,您可以执行以下操作: <?php $pages = array(); $pages[] = 'page1.php'; $pages[] = 'page2.php'; $pages[] = 'page3.php'; $pages[] = 'page4.php'; $pages[] = 'page

执行许多PHP页面的最快方式是什么。我不需要查看它们(即从任何输出的html中刮取或保留任何信息),但它们需要加载。需要执行每个页面中的PHP代码


我首先开始做的是
foreach(…){echo,您可以执行以下操作:

<?php

$pages = array();

$pages[] = 'page1.php';
$pages[] = 'page2.php';
$pages[] = 'page3.php';
$pages[] = 'page4.php';
$pages[] = 'page5.php';

foreach($pages as $page):
    include $page;
endforeach;
?>

好吧,尽管与我的理解差别很小,因为每个循环都是最慢的循环类型。你真正的问题是iframe,它们的速度非常慢。你应该做的是include();或require();甚至require_once()

避免使用iFrame,因为我相信它们实际上计划放弃对它们的支持。 如果您需要它们显示特定的was或样式,只需使用CSS来定位它们,就像您使用iframe时那样,但在其位置使用div


我希望这会有所帮助。

多线程将让您尽可能快地调用URL,因为您可以在同一时间进行多个加载。PHP对多线程的支持不是很好,但我们可以让它进行多处理。这将允许您启动URL请求并立即启动更多请求,而无需等待任何响应要加载的页面数

下面的代码是一个如何使用wget实现这一点的示例。这会很快,但也有不让您知道成功或失败的缺点

<?php
foreach($pages as $page){
    exec('/usr/bin/wget '.$page.' > /dev/null 2>&1 &');
}
?>

这可以进一步调用您自己的php脚本而不是wget。在这种情况下,您的程序可以记录加载失败的URL

因此,一个完整的示例可以是如下所示:

<?php

$pages = array();

$pages[] = 'page1.php';
$pages[] = 'page2.php';
$pages[] = 'page3.php';
$pages[] = 'page4.php';
$pages[] = 'page5.php';

foreach($pages as $page):
    include $page;
endforeach;
?>
run.php

<?php
foreach($pages as $page){
    exec('loadPage.php '.$page.' > /dev/null 2>&1 &');
}
?>
<?php
$handle = curl_init($url);
curl_setopt($handle,  CURLOPT_RETURNTRANSFER, TRUE);
$response = curl_exec($argv[1]);
$httpCode = curl_getinfo($handle, CURLINFO_HTTP_CODE);
if($httpdCode != '200'){
    $fp = fopen('error.log', 'w');
    fwrite($fp, 'The URL '.$url.' had an issue. It returned a '.$httpCode.' error.');
    fclose($fp);
}
?>

loadPage.php

<?php
foreach($pages as $page){
    exec('loadPage.php '.$page.' > /dev/null 2>&1 &');
}
?>
<?php
$handle = curl_init($url);
curl_setopt($handle,  CURLOPT_RETURNTRANSFER, TRUE);
$response = curl_exec($argv[1]);
$httpCode = curl_getinfo($handle, CURLINFO_HTTP_CODE);
if($httpdCode != '200'){
    $fp = fopen('error.log', 'w');
    fwrite($fp, 'The URL '.$url.' had an issue. It returned a '.$httpCode.' error.');
    fclose($fp);
}
?>

到目前为止,最有效的方法是线程化它

(不包含最新版本,git,如果可以的话)

我认为这很可能是代码包含在几个页面中的唯一原因(我假设这些页面是本地的)因为这是在PHP中实现并发性的唯一方法…如果这是正确的,那么您很可能应该重写代码,因为您不再需要服务器来实现并发性。即使它们是不同物理机器上的外部站点,也需要将请求线程化…您甚至可以

而且很简单


页面、类或自定义函数?这一个至少有意义。您想做什么?您是在客户端还是服务器上做的(如果是客户端,则PHP标记不相关,因为它与可能的答案无关)。@nickdos服务器端(最好),但我对jquery也很满意。我想这就像爬行一样,除非页面加载完毕,否则我不需要任何东西——只需要它加载并运行每个php文件中的命令。@metal\u fan它们基本上只是php脚本,不会产生任何输出。我敢打赌,除非你提出正确的问题,否则你不会得到明确的答案。你知道吗r问题对我们来说并不清楚最好是
require()
而不是
include()
,因为我们不知道这个包含是否会失败。谢谢。我不需要任何html在浏览器中呈现,只需要执行。有两个错误(至少):1)PHP不像Python或JavaScript。在数组(或对象)上迭代我们在
中使用
foreach
而不是
for.。2)函数
exec()
在PHP中不存在。for()是一个输入错误,正如我从for开始时一样(i元=0 ;;i@Brett我会尝试一下。这听起来像是一个完美的答案。我可以很容易地验证它是否有效使用mysql。事实上,这将比某种文本输出更容易。谢谢!我会让你知道它是如何进行的