私はcronジョブを使用して毎時実行しているPHPスクリプトを以下に示します。時にはこのスクリプトは何のエラーもなく実行され、504 Gateway Timeout
がスローされます。このPHPスクリプトを実行するとHTTP 504のタイムアウトが発生する
誰かがこのスクリプトの実行と効率を向上させるのに役立つことができますか?私はそれがきれいに書かれることができると信じていますが、どこから始めるべきかわかりません。
これは共有サーバー上にあり、設定の管理はあまりありません。
curl www.mysite.com/apps/script.php
PHPスクリプト:最大タイムアウトは120
cronジョブであるあなたの時間
<?php
set_time_limit(500);
$databasehost = "localhost";
$databasename = "foodb";
$databasetable = "footable";
$databaseusername="foouser";
$databasepassword = "foopass";
$fieldseparator = ",";
$lineseparator = "\n";
$csvfile = "inventory.csv";
if(!file_exists($csvfile)) {
die("File not found. Make sure you specified the correct path.");
}
try {
$pdo = new PDO("mysql:host=$databasehost;dbname=$databasename",
$databaseusername, $databasepassword,
array(
PDO::MYSQL_ATTR_LOCAL_INFILE => true,
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION
)
);
$sql = "TRUNCATE TABLE $databasetable";
$command = $pdo->prepare($sql);
$command->execute();
echo "Removed records from $databasename.\n<br />";
} catch (PDOException $e) {
die("database connection failed: ".$e->getMessage());
}
$affectedRows = $pdo->exec("
LOAD DATA LOCAL INFILE ".$pdo->quote($csvfile)." INTO TABLE `$databasetable`
FIELDS TERMINATED BY ".$pdo->quote($fieldseparator)."
LINES TERMINATED BY ".$pdo->quote($lineseparator)."IGNORE 1 LINES");
echo "Loaded a total of $affectedRows records from this csv file.\n";
/****/
try {
$pdo = new PDO("mysql:host=$databasehost;dbname=$databasename",
$databaseusername, $databasepassword,
array(
PDO::MYSQL_ATTR_LOCAL_INFILE => true,
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION
)
);
$sql = $pdo->exec("
UPDATE wp37_pmxi_posts
JOIN wp37_postmeta USING (post_id)
JOIN inventoryImport ON wp37_pmxi_posts.unique_key = inventoryImport.sku
SET meta_value = inventoryImport.qty
WHERE meta_key = '_stock'");
echo "Updated $affectedRows records after the import.\n";
} catch (PDOException $e) {
die("database connection failed: ".$e->getMessage());
}
?>
おかげで、私は任意の助けに感謝します。
あなたは 'sleep()'を使って実行を遅らせようとしましたか? –
cronジョブはどこに実行されていますか?サーバマシンで動作している場合は、 'curl'を使う代わりに' php/path/to/file/script.php'を直接呼び出すことができます。スクリプト上でプログラムを直接呼び出すと、より多くの利益が得られます –
'set_time_limit(500);'を 'set_time_limit(0)'に変更し、あなたのPHPを直接呼び出します。e *** php /path/to/your/script.php*** curlを使う代わりに。 –