简体   繁体   English

max_execution时间限制php

[英]max_execution time limit php

I have a problem that I've been trying to solve for the last couple of days. 最近几天,我一直在尝试解决一个问题。 I have a site where I crawl news and that works perfectly. 我有一个网站,可以在其中抓取新闻,并且效果很好。 Recently however, I've encountered a problem with my analyzer_script as it appears to exceed the time limit my web host has set. 但是最近,我的analyzer_script遇到了问题,因为它似乎超出了我的网络主机设置的时间限制。 Apparently there is an max_execution time at about 1 minute, and my script takes way longer than that. 显然,max_execution时间大约为1分钟,而我的脚本花费的时间更长。 And I'm not able to adjust that in the php.ini script since I'm hosting my website on a public server. 而且由于我将网站托管在公共服务器上,因此无法在php.ini脚本中进行调整。 What can I do? 我能做什么? Do I need to rewrite my script? 我需要重写脚本吗?

I appreciate your help! 我感谢您的帮助! My script is below: 我的脚本如下:

<?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";
}




?>

You can use ini_set at the top of your script like this: 您可以在脚本顶部使用ini_set ,如下所示:

ini_set('max_execution_time' , 300 );

The above call would set max execution time of the script to five minutes. 上述调用会将脚本的最大执行时间设置为五分钟。 Here's the doc page: 这是文档页面:

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

If your host allows, you might also consider running this script via cron or some other scheduling daemon. 如果主机允许,您也可以考虑通过cron或其他调度守护程序运行此脚本。 PHP scripts run in the cli context usually have no execution time limit, or a much higher one. 在cli上下文中运行的PHP脚本通常没有执行时间限制,或者更高。

Try this: 尝试这个:

ini_set('max_execution_time', 0);

The original Post 原始帖子

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM