douxiajia6720 2018-07-21 12:21
浏览 176
已采纳

使用crontab运行带有SQL查询的php

I used this cronjob to perform php script with sql query every minute:

* * * * * /usr/bin/php /local/path/to/file.php

Unfortunately, this triggers an error due to not knowing what Mysqli extension is.

therefore I used

* * * * * curl /localhost/server/root/path/to/file.php

This works, but I wonder if it is possible to specify local path of the file instead of adding php file to the apache project and running curl to execute it?

No one, but the crontab should run the file so it makes little sense to place it among other apache files. thanks

There is a hackish solution that is based on malicious users not knowing that they need to pass a query parameter:

crontab:

* * * * * curl /localhost/server/root/path/to/file.php?randomString=veryRandomString

php:

<?php
$authentication = isset($_GET['randomString']) ? $_GET['randomString'] : '';
if($authentication == "veryRandomString"){
//proceed
}else{
die();
}

Any other solution?

ERROR UPDATE: When I run in terminal this 2 commands I get:

/usr/bin/php /local/path/to/file.php // triggers mysqli error
php /local/path/to/file.php // successfull script execution



`whereis php` returns `/usr/bin/php`
  • 写回答

2条回答 默认 最新

  • dongnan4571 2018-07-21 13:51
    关注

    Try using which php instead of whereis php to see which php is being used when you run php for the case that works, with no path specified.

    I suspect it might not be /usr/bin/php. Note: "which" searches your user's PATH, and it's possible that running php without the /usr/bin/php specified is running a different php version than /usr/bin/php. If that turns out to be the case, just change your crontab to specify the full path to that one, which works.

    You can also examine what php.ini is being used for the two cases:

    First, try this

    /usr/bin/php --ini

    ... and compare it to this:

    php --ini

    Are they both using the same ini? If not, are they different? Look for the extension being loaded, it should look something like this:

    extension=mysqli.so

    If you see a semicolon in front, it means that the line is commented out, so remove the semicolon. If the extension is not loaded, of course you will not be able to load mysqli.

    Unrelated: For future projects, consider PDO instead of mysqli, it's more modern. Also, remember that solutions like "?randomString=veryRandomString" which you suggested will often log veryRandomString in web server logs.

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥20 c语言写的8051单片机存储器mt29的模块程序
  • ¥60 求直线方程 使平面上n个点在直线同侧并且距离总和最小
  • ¥50 java算法,给定试题的难度数量(简单,普通,困难),和试题类型数量(单选,多选,判断),以及题库中各种类型的题有多少道,求能否随机抽题。
  • ¥50 rk3588板端推理
  • ¥250 opencv怎么去掉 数字0中间的斜杠。
  • ¥15 这种情况的伯德图和奈奎斯特曲线怎么分析?
  • ¥250 paddleocr带斜线的0很容易识别成9
  • ¥15 电子档案元素采集(tiff及PDF扫描图片)
  • ¥15 flink-sql-connector-rabbitmq使用
  • ¥15 zynq7015,PCIE读写延时偏大