2

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

我刚开始做foreach (...){echo <iframe src=....非常丑陋,花了长时间和非常糟糕的主意

现在我正在考虑设置一个 jquery 计时器来继续加载 ajax 请求并通过一个数组。

有没有更好的方法来解决这个问题?

4

4 回答 4

1

您可以执行以下操作:

<?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;
?>
于 2012-10-10T00:49:16.253 回答
1

好吧,尽管与我的理解差异很小,但 foreach 是最慢的循环类型。你真正的问题是 iframe 他们是出了名的慢。你应该做的是一个 include(); 或要求();甚至 require_once();

$pages = array();
$pages[] = "Page1.php";
$pages[] = "Page2.php";
$pages[] = "Page3.php";
foreach($pages as $page)
{
require($page);
}

避免使用 iframe,因为我相信它们实际上计划放弃对它们的支持。如果您需要它们出现某种风格或样式,只需使用 CSS 将它们定位为您在使用 iframe 时的位置,但在其位置使用 div。

我希望这有帮助。

于 2012-10-10T01:01:05.430 回答
1

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

以下代码是如何使用 wget 完成此操作的示例。这将很快,但确实有不让您知道成功或失败的缺点。

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

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

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

运行.php

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

加载页面.php

<?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);
}
?>
于 2012-10-10T01:10:19.487 回答
0

到目前为止,最有效的事情是线程它......

http://pthreads.org

http://docs.php.net/manual/en/book.pthreads.php

http://pecl.php.net/package/pthreads(不包含最新版本,如果可以的话 git)

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

http://pthreads.org/pool.php

这太容易了

http://pthreads.org/pool.phps

于 2012-10-11T07:32:09.693 回答