【发布时间】: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 分钟内完成。