gpt4 book ai didi

php - 为什么 cron 执行 php 脚本有点不同?

转载 作者:行者123 更新时间:2023-11-29 15:28:05 25 4
gpt4 key购买 nike

我有 file1.php,其中包含其他 file2.php 中的函数。正在执行 MySQL 查询,这些查询在该函数中选择和插入信息。首先,它正在执行选择查询,然后所有内容都写入数组,然后再次从数组插入到 MySQL 数据库。当函数在浏览器中执行时它工作正常,但当 cron 执行函数时,函数中的脚本不会插入到 MySQL 数据库中(还有其他 MySQL 和数组)与 cron 配合使用的命令)。

我不知道它会是什么。

我尝试过调试并输出 cron 执行但不成功。

cron 执行时,代码在函数中不起作用,但在浏览器中执行时却起作用。

<?php    
global $db;
$mycfg_channels = mycfg('channels');
$mycfg_lang = mycfg('lang');
$_channels = db_query("SELECT id, xmlid, chname FROM `program_name` WHERE `enable`=1 AND `id` IN ({$mycfg_channels});");
$channels = array();
foreach (explode(",", $mycfg_channels) as $v) {
$channels[$v]= @$_channels[$v];
}
$result = $db->sql_query("SELECT `username` FROM `users_export`;");
$operats = array();
while ($row = $db->sql_fetchassoc($result)) {
$operats[]= $row['username'];
}
$operators_channels = array();
foreach ($operats as $key => $value) {
$channels_id_response = $db->sql_query("SELECT `channels_id` FROM `users_export` WHERE `username`= '{$value}'");

$row = array();
$row = $db->sql_fetchrow($channels_id_response);
foreach ($row as $val) {
$ch_value = $val;
}
$channels_id_exploded = explode(",", $ch_value);
$allowed_channels = array();
foreach ($channels_id_exploded as $ch) {
$allowed_channels[] = $ch;
}
$operator_channels_from_mycfg = array();
foreach($allowed_channels as $ch) {
foreach ($channels as $c) {
if ($ch == $c['xmlid']){
$operator_channels_from_mycfg[] = $c;
}}
}
foreach ($operats as $key => $val) {
if ($value == $val ) {
foreach ($operator_channels_from_mycfg as $k => $v) {
$operators_channels[$val][]= $v['xmlid'];
}
}
}
}
$operators_channels_delta = array();
foreach ($operators_channels as $key => $value) {

foreach ($value as $k => $v) {

$delta_from_db = $db->sql_query("SELECT `{$key}_delta` from `program_schedule` WHERE `chid`='{$v}'");
while ($row = $db->sql_fetchrow($delta_from_db)) {

$operators_channels_delta[$key][$v] = $row[$key+'_delta'];
}
}

}
var_dump($operators_channels_delta);

foreach ($operators_channels_delta as $key => $value) {

foreach ($value as $k => $val) {
if (isset($val)){
$db->sql_query("UPDATE `program_schedule` SET `{$key}_delta`= '{$val}' WHERE `chid`={$k}");
}}
}


?>

它是syslog的输出。当cron执行脚本时:

Nov 19 14:09:01 media CRON[1689]: (root) CMD (  [ -x /usr/lib/php5/maxlifetime ] && [ -x /usr/lib/php5/sessionclean ] && [ -d /var/lib/php5 ] && /usr/lib/php5/sessionclean /var/lib/php5 $(/usr/lib/php5/maxlifetime) >> /var/log/cronlog 2>&1)
Nov 19 14:09:01 media CRON[1693]: (www-data) CMD (/var/www/StartStop/html/includes/cron_1sec.php >> /var/log/cronlog 2>&1)
Nov 19 14:09:01 media CRON[1688]: (CRON) info (No MTA installed, discarding output)
Nov 19 14:09:01 media CRON[1687]: (CRON) info (No MTA installed, discarding output)

当我在浏览器中手动执行脚本时:

Nov 19 14:12:01 media CRON[3132]: (www-data) CMD (/var/www/StartStop/html/includes/cron_1sec.php >> /var/log/cronlog 2>&1)
Nov 19 14:12:01 media CRON[3131]: (CRON) info (No MTA installed, discarding output)

通过 MTA 获取输出失败。

我可以从该输出中获得有关环境变量的哪些信息?在文件 /var/log/cronlog 中,我只得到 PHP警告:模块'xdebug'已经在第0行的未知中加载

最佳答案

我建议您查看 PHP 日志,是否发生错误?

当您使用 crontab 运行 PHP 脚本时,执行该脚本的事件目录与 Web 服务器的事件目录不同。尝试使用绝对路径(从磁盘根目录)在 file1.php 中请求文件 file2.php。

关于php - 为什么 cron 执行 php 脚本有点不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58930536/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com