【问题标题】:PHP curl get headers doesn't work for a cron job for more than 300 entriesPHP curl get headers 不适用于超过 300 个条目的 cron 作业
【发布时间】:2019-05-23 10:08:52
【问题描述】:

我有一个 cron 作业,它扫描 URL 以查看它们是否在线。我的问题是它永远不会完成 844 个网站。它会在 260 到 300 多一点之间变化。

cron 作业每 30 分钟调用一次此 PHP 文件,但它从未完成我的完整列表。是否有什么我没有正确执行以阻止循环完成任务?

// php file
//first part gets the csv file and reads the 844 sites

if (($handle = fopen("/public/csvs/" . $csv, "r")) !== FALSE) {
    while (($data = fgetcsv($handle, 0, ",")) !== FALSE) {
        $num = count($data);

        for ($c = 0; $c < $num; $c++) {

           $site = $data[$c];

                   $curl = curl_init();
                    curl_setopt_array( $curl, array(
                        CURLOPT_HEADER => true,
                        CURLOPT_NOBODY => true,
                        CURLOPT_RETURNTRANSFER => true,
                        CURLOPT_URL => 'https://'.$site ) );
                    $headers = explode( "\n", curl_exec( $curl ) );
                    curl_close( $curl );

                     // gets the status of the URL then 
                     fills it in the database.

                    $statushttp = $headers[0];



                    $mysqltime = date("Y-m-d H:i:s", $phptime);


                        //$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
                        //$sql = $conn->prepare($sql);
                        $sql = "INSERT INTO csv (http_status,status,url,csv,related)
                     VALUES ('$statushttp','$status','$site','$csv',1)";

                        // use exec() because no results are returned

                        $conn->exec($sql);
                        //echo $site ." ".$statushttp."<br>";
                        //echo $statusCode."<br>";



        }

    }

}

【问题讨论】:

  • 您需要增加 PHP 的执行时间。 stackoverflow.com/questions/3829403/…
  • CLI 不受(不应)与 HTTP 相同的时间限制。很难说没有关于托管的详细信息。
  • 我确实增加了最大执行时间,但就像 ArtisticPhoenix 指出的那样,它不会影响 CLI。我试过 set_time_limit(0);在顶部。
  • 尝试将 cron 作业间隔增加到 2 小时以确保其完成。如果我们平均每个网站 5 秒,那么 844 个网站将在 1 小时 10 分钟内完成。

标签: php mysql csv curl cron


【解决方案1】:

在另一台服务器上试过,没有问题。

【讨论】:

    猜你喜欢
    • 2015-10-29
    • 1970-01-01
    • 2014-10-22
    • 2013-02-06
    • 2011-03-08
    • 2015-03-07
    • 2016-07-22
    • 2014-04-26
    • 1970-01-01
    相关资源
    最近更新 更多