【问题标题】:How can I restrict the amount of time a PHP include will wait for a result?如何限制 PHP 包含等待结果的时间?
【发布时间】:2009-06-04 18:46:07
【问题描述】:

我包含一个从远程服务器请求文件的本地类。这个过程相当不可靠——因为远程服务器经常超载——有时我必须等待 20 秒左右才能让包含放弃并继续。

我想限制包含脚本的执行时间;比如说,五秒钟。

当前代码:

include('siteclass.class.php');

更新:

我在课堂上的代码:

$movie = str_replace(" ","+",$movie);
$string = join('',file($siteurl.$l.'/moviename-'.$movie));

if(!$i) { static $i = 1;}
if($file_array = $string)
{
    $result = Return_Substrings($file_array, '<item>', '</item>');

    foreach($result as $res) {

就加载而言,基本上就是这样。内部处理大约需要 0.1 秒。我想这很可行。

【问题讨论】:

  • 如果您有一个有时可以在没有外部类的情况下执行的脚本,这很奇怪。我的意思是要么总是使用它,要么从不使用它。 20秒太慢了。我认为你应该重新考虑你的软件。
  • 实际执行请求的代码是什么?例如,如果您使用 cURL,您可以设置超时并处理错误。

标签: php include timeout


【解决方案1】:

请注意,我没有测试这段代码,把它当作一个命题:

$fp = fopen('siteclass.class.php', 'r'); stream_set_timeout($fp, 2); stream_set_timeout($fp,$timeout); $info = stream_get_meta_data($fp); if ($info['timed_out']) { echo "连接超时!"; } 别的 { $文件 = ''; 而 (!feof($fp)) { $file .= fgets($fp); } 评估($文件); }

超时以秒为单位设置,因此示例将其设置为两秒。

【讨论】:

  • 感谢您的帮助。事实证明,我的 php 文件返回空白。没有错误没有,只是空白。我想这与我不包括页面内的类有关。 (虽然不确定>不是专家),但我错过了课堂上要求的一些变量。 (设置了一些全局变量,比如'$movie'。你怎么看?谢谢!
  • 好的,我为我的无能深表歉意。但是,结果我忘了从类文件中删除'
【解决方案2】:

这并不完全符合您的要求,但这会将包含和执行的时间限制设置为总共 25 秒。如果达到时间限制,则会引发致命错误。

set_time_limit(25);

【讨论】:

    【解决方案3】:

    听起来set_time_limit() 可能会做你想做的事:

    PHP Manual for that function

    【讨论】:

      【解决方案4】:

      修复包含的代码以使 HTTP 请求超时,然后很好地恢复,而不是仅仅通过对脚本本身设置时间限制来中止。

      我的建议是找到问题的根源,而不是寻找解决方法。

      【讨论】:

      • 您对我的(新更新的)代码有什么建议?我同意你的愿景>从根本上解决它。谢谢
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-01-25
      • 2022-11-20
      • 1970-01-01
      • 2021-08-16
      相关资源
      最近更新 更多