首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >max_execution时限php

max_execution时限php
EN

Stack Overflow用户
提问于 2014-11-14 20:59:47
回答 2查看 577关注 0票数 0

在过去的几天里,我一直试图解决一个问题。我有一个网站,我抓取新闻,这是完美的工作。然而,最近,我的analyzer_script遇到了一个问题,因为它似乎超过了我的web主机设置的时间限制。显然,max_execution的时间约为1分钟,而我的脚本花费的时间要长得多。而且我无法在php.ini脚本中调整这一点,因为我在一个公共服务器上托管我的网站。我能做什么?我需要重写我的剧本吗?

我很感激你的帮助!我的剧本如下:

代码语言:javascript
复制
<?php
    $array = array();
    $sub_array = array();
    $analyzer_ids = array();

$res5 = mysqli_query($con,"SELECT id,status FROM statuz ORDER BY id DESC LIMIT 1");
$row5 = mysqli_fetch_array($res5);

$status = $row5['status'];
$status_id = $row5['id'];

if($status == 2) {

    $res1 = mysqli_query($con,"SELECT tag, id FROM tags");
    while($row1 = mysqli_fetch_array($res1)) {
        $tag = $row1['tag'];
        $id = $row1['id'];

        $res2 = mysqli_query($con,"SELECT sub_tag FROM sub_tags WHERE tag_id = '$id'");
        while($row2 = mysqli_fetch_array($res2)) {
            $sub_tag = $row2['sub_tag'];
            $sub_tag = strtolower($sub_tag);
            $sub_array[] = $sub_tag;
        }

        $array[] = array('tag_id' => $id, 'tag' => $tag, 'sub_tag' => $sub_array);
        $sub_array = array();
    }

    mysqli_query($con,"INSERT INTO analyzer_queue (crawler_id, status)
    (SELECT id,0 FROM crawlers)");

    $initial_res = mysqli_query($con,"SELECT crawler_id,id FROM analyzer_queue WHERE status = '0'");
    while($initial_row = mysqli_fetch_array($initial_res)) {

        $analyzer_id = $initial_row['id'];
        $start_crawler_id = $initial_row['crawler_id'];
        mysqli_query($con,"UPDATE analyzer_queue SET status = '1' WHERE crawler_id = '$start_crawler_id' ORDER BY id DESC LIMIT 1");
        $analyzer_ids[] = $analyzer_id;

                $res = mysqli_query($con,"SELECT cr.title, cr.content, cr.id
                FROM crawler_results cr
                INNER JOIN crawlers c
                ON c.newspaper_id = cr.newspaper_id
                WHERE c.id = '$start_crawler_id'
                AND status = '3'
                LIMIT 10");
                while($row = mysqli_fetch_array($res)) {

                    $article_id = $row['id'];
                    $title = $row['title'];
                    $content = $row['content'];

                    $content = strip_tags($content);
                    $content = strtolower($content);
                    $title = strtolower($title);


                    $count = array();
                    foreach ($array as $tag) {
                        $regex = '/(?:\b' . preg_quote($tag['tag'], '/');
                        foreach ($tag['sub_tag'] as $sub) {
                            $regex .= '\b)|(?:\b' . preg_quote($sub, '/');
                        }
                        $regex .= '\b)/i';
                        $count_content = preg_match_all($regex, $content, $count_content);
                        $count_title = preg_match_all($regex, $title, $count_title);
                        $count_total[$tag['tag']] = $count_content + $count_title;
                        $total_count = $count_total[$tag['tag']];

                        $tag_name = $tag['tag'];

                        $res5 = mysqli_query($con,"SELECT id FROM tags WHERE tag = '$tag_name'");
                        $row5 = mysqli_fetch_array($res5);

                        $tag_id = $row5['id'];


                        if($total_count != 0) {
                            mysqli_query($con,"INSERT INTO article_tags (article_id,tag_id,count_tags) VALUES('$article_id','$tag_id','$total_count')");
                        }

                        echo$count_total[$tag['tag']];
                        echo"<br /><br />";
                    }

                    echo"<pre>";
                    print_r($count_total);
                    echo"</pre>";

                    mysqli_query($con,"UPDATE crawler_results SET status = '2', analyzer_id = '$analyzer_id' WHERE id = '$article_id'");
                }
                mysqli_query($con,"UPDATE analyzer_queue SET status = '2' WHERE crawler_id = '$start_crawler_id' ORDER BY id DESC LIMIT 1");

        }
        mysqli_query($con,"UPDATE crawler_results SET status = '4' WHERE analyzer_id NOT IN (".implode(',',$analyzer_ids).")");
        mysqli_query($con,"UPDATE statuz SET status = '3' WHERE id = '$status_id'");
        print_r($analyzer_ids);

} else {
    echo"Not ready yet";
}




?>
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-11-14 21:06:39

试试这个:

代码语言:javascript
复制
ini_set('max_execution_time', 0);

The original Post

票数 0
EN

Stack Overflow用户

发布于 2014-11-14 21:03:49

您可以在脚本的顶部使用ini_set,如下所示:

代码语言:javascript
复制
ini_set('max_execution_time' , 300 );

上面的调用将脚本的最大执行时间设置为5分钟。下面是文档页面:

http://php.net/manual/en/function.ini-set.php

如果主机允许,您还可以考虑通过cron或其他调度守护进程运行此脚本。在cli上下文中运行的PHP脚本通常没有执行时间限制,或者更高。

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

https://stackoverflow.com/questions/26938773

复制
相关文章

相似问题

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