使用cronjobs运行包含MySQL查询的PHP脚本

问题描述:

我有一个包含sql查询的“save.php”php脚本,并且需要在后台运行此脚本,即不在浏览器中。为了调用这个脚本,我在名为“trigger.php”的文件中使用了exec()命令。使用cronjobs运行包含MySQL查询的PHP脚本

现在当save.phpexec()调用时不使用MySQL的查询运行正常,但是当我把MySQL的查询的查询不能单独工作,脚本的其余部分执行罚款。据我所知,mysql_connect无法运行。

我不能使用cronjob,因为我的需求不同,我使用需要触发脚本,它应该连续运行,但不是间隔。

那么,有没有一种方法可以在需要在后台运行的文件中创建MySqL Server连接?

我已经设法弄清楚了这个问题。

我正在为PHP和MySQL运行MAMP。 MySQL的套接字是在MAMP的MySQL目录中创建的,但是当我们使用exec()调用PHP脚本时,脚本正在从shell /命令提示符处触发,该命令检查通常目录中的MySQL套接字,它是/var/mysql/mysql.sock。这就是为什么我们得到以下错误。

Warning: mysql_connect(): [2002] No such file or directory (trying to connect via unix:///var/mysql/mysql.sock) 

所以,我创建了一个目录下/var并添加符号链接使用

sudo mkdir /var/mysql 

sudo ln -s /Applications/MAMP/tmp/mysql/mysql.sock /var/mysql/mysql.sock 

工作得非常好,现在的实际插槽。

谢谢大家的建议!

我不完全确定你在问什么(我失去了你的思路)......但是如果你试图让你的脚本永远运行或者至少只要你的主机允许你(? )而不使用cronjob,那么您可以使用脚本顶部的set_time_limit($ seconds)函数来设置主机允许的最大执行时间。在脚本结束时,让它睡眠($秒),然后调用exec()再次执行。一定要考虑执行时间,否则你将错过触发器。

如果你的sql连接不工作,那么你将需要弄清楚那里发生了什么。如果您发布了一些代码,我们可以帮助您进行调试。持久连接的mysql_connect和mysql_pconnect是您将用于建立与数据库连接的命令。

+0

我只是想通过mysql_connect()命令得到的错误..它显示错误号:2002.这是因为脚本运行在后台ie,而不是在浏览器中,但使用其他一些套接字.. !!我是否正确.. ..? – aBadAssCowboy

PHP脚本并不意味着作为守护进程来运行(很多问题,其中的时间限制只是开始),所以你需要一个启动程序。

pcntl_fork()是一个简单的替代exec(),如果你在一个支持它的系统上。

至于你在exec()方面的问题,这个问题很可能与你正在执行的PHP解释器有一个不同于在你的web服务器上运行的环境的事实有关。

尝试在两种环境下执行phpinfo()以查看实际差异。

虽然我必须承认我看不到会导致“无法连接到服务器”错误;请发布完整的错误消息。难道本地防火墙阻止了php.exe?也许有其他安全措施?或者你会得到不正确的信息管理MySQL服务器的主机名?

尝试从命令行运行您的exec'ed脚本。这会让你接近Web服务器正在做的事情。

+0

oki ..当我在终端中运行它显示以下 错误警告:mysql_connect():[2002]没有这样的文件或目录(试图通过unix:///var/mysql/mysql.sock连接)在/应用程序/ MAMP/bin/mamp /测试/未命名Site 5/test/db_connect.php第5行 可能是我的MySQL服务器不接受套接字。我怎么能让它发生..? 我正在使用Mac OS X Lion和MAMP – aBadAssCowboy

+0

尝试通过TCP/IP而不是域套接字进行连接。 – aib