0

我正在使用 php 根据 Excel 文件的内容安排动态 cron 作业,并将这些值传递给argv. 我的代码如下:

$data = new SpreadSheet_Excel_Reader("sample-data.xls", false);

$surveyToken = "Token";
$email = rawurlencode($data->val(2, "B"));
$dateCompleted = rawurlencode($data->val(2, "C"));
$followUpOne = rawurlencode($data->val(2, "E"));
$followUpTwo = rawurlencode($data->val(2, "F"));
$programName = rawurlencode($data->val(2, "G"));
$subject = rawurlencode($data->val(2, "H"));
$firstName = rawurlencode($data->val(2, "I"));
$lastName = rawurlencode($data->val(2, "J"));
$learningGoal = rawurlencode($data->val(2, "K"));
$importanceScore = rawurlencode($data->val(2, "L"));
$confidenceScore = rawurlencode($data->val(2, "M"));
$strategies = rawurlencode($data->val(2, "N"));
$timeLine = rawurlencode($data->val(2, "O"));
$measures = rawurlencode($data->val(2, "P"));
$resources = rawurlencode($data->val(2, "Q"));

$output = shell_exec("crontab -l");
file_put_contents("crontab.txt", $output . "39 * * * * /usr/local/php53/bin/php mail.php $surveyToken $email $dateCompleted $followUpOne $followUpTwo $programName $subject $firstName $lastName $learningGoal $importanceScore $confidenceScore $strategies $timeLine $measures $resources" . PHP_EOL);
exec("crontab crontab.txt");

我在 mail.php 脚本中使用原始 URL 解码,并通过从argv.

我已经通过简单地在命令行上使用输出的“url”及其参数执行它来测试这个脚本,而不是为它安排一个 cron 作业。

当我这样执行它时,它工作正常。当我运行上面的代码时,cron 作业运行良好,php 文件仍然给我发电子邮件,但所有变量都是空的argv

4

2 回答 2

1

当您将参数发送到命令行 /shell_exec时,您不应该使用rawurlencode()它,因为它不是 url。

相反,您应该使用escapeshellarg(); 这会正确转义变量以用于shell_exec.

除此之外,我会尽量避免这样的动态调度;我会每小时运行一个读取 Excel 文件并包含邮件文件的 cron 作业。如果要生成作业队列,可以使用类似的数据库。

于 2013-07-19T17:01:01.180 回答
0

我确实想到的一件事是,您应该检查是否在 php.ini 中设置了 register_argc_argv 或使用 ini_set()。

于 2013-07-19T17:05:37.243 回答