在后台运行包含MySQL查询的PHP脚本,而不使用cronjobs

时间:2011-11-19 07:49:29

标签: php mysql

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

现在当save.phpexec()调用时,它在没有使用mysql查询时运行正常。但是当我放置mysql查询时,单独的查询不起作用而脚本的其余部分执行精细。据我所知,mysql_connect无法运行。

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

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

3 个答案:

答案 0 :(得分:1)

我已经设法解决了这个问题。

我正在为PHP和MySQL运行MAMP。 MySQL的套接字是在MAMP的MySQL目录中创建的,但是当我们使用exec()调用PHP脚本时,脚本将从shell /命令提示符触发,该提示符检查通常目录中的MySQL套接字,即{{1 }}。这就是我们收到以下错误的原因。

/var/mysql/mysql.sock

所以,我在Warning: mysql_connect(): [2002] No such file or directory (trying to connect via unix:///var/mysql/mysql.sock) 下创建了一个目录,并使用

添加了一个指向实际套接字的符号链接
/var

现在效果很好。

感谢大家的建议!

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

PHP脚本不应该作为守护进程运行(这么多问题,时间限制只是开始)所以你需要一个启动器。

如果您使用支持它的系统,则

pcntl_fork()exec()的更简单替代方案。

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

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

虽然我必须承认我看不出会导致“无法连接到服务器”的错误;请发布完整的错误消息。可以是本地防火墙阻止php.exe吗?或许其他一些安全措施?或者您是否可以获得关于MySQL服务器主机名的错误信息?

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