【问题标题】:LOAD DATA LOCAL INFILE working via terminal but not cron jobLOAD DATA LOCAL INFILE 通过终端工作,但不是 cron 作业
【发布时间】:2020-01-16 04:47:27
【问题描述】:

我有一个使用LOAD DATA LOCAL INFILEcsv file 的PHP 脚本。

脚本下载 csv 文件并将其存储到与脚本相同的位置,然后使用LOAD DATA LOCAL INFILE 执行查询以插入 csv。

如果重要的话,csv 和 php 脚本的位置都在 public_html 之外。

当我将脚本作为 cron 作业 运行时,它会运行、下载 csv(并存储在正确的位置),但 不会插入 到数据库中。查询返回 false

如果我打开 终端 并运行脚本,它会将 csv 和 inserts 下载到数据库中。查询返回 true

在终端运行和通过cron运行有区别吗?

这是 cron 行:

/usr/bin/php -q /home/username/my_crons/csvfile/csvdownload.php

注意:我还有其他可以将数据正确插入数据库的 cron 脚本,但这是唯一使用 LOAD DATA LOCAL INFILE 的脚本。也许这是该命令的问题。

【问题讨论】:

  • 在运行查询后检查mysql错误以找出失败的原因。
  • 对不起,应该是我做的第一件事。是的,好像 LOAD DATA LOCAL INFILE 是被禁止的。我以为我通过 WHM 启用了它,但似乎我查看我的主目录的 cron 作业使用了不同的 php 版本,我必须为它启用 mysqli.allow_local_infile。谢谢!

标签: php mysql cron


【解决方案1】:

正如 aynber 所指出的,我应该添加一些错误检查以查看来自 MySQL 的错误消息。

我做了一次,错误如下:

Error description: LOAD DATA LOCAL INFILE is forbidden, check mysqli.allow_local_infile

这对我来说很奇怪,因为我认为我已经使用 PHP 编辑器通过 WHM 启用了它。但是,我注意到我的 cron 作业使用了不同的 PHP 版本,需要在那里启用它。启用后,它解决了问题。

我不得不添加到 php.ini:

mysqli.allow_local_infile = On

【讨论】:

    猜你喜欢
    • 2018-03-04
    • 1970-01-01
    • 2019-05-13
    • 1970-01-01
    • 2016-07-31
    • 1970-01-01
    • 2012-10-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多