2011-11-19 91 views
0

我有一個包含sql查詢的「save.php」php腳本,並且需要在後臺運行此腳本,即不在瀏覽器中。爲了調用這個腳本,我在名爲「trigger.php」的文件中使用了exec()命令。使用cronjobs運行包含MySQL查詢的PHP腳本

現在當save.phpexec()調用時不使用MySQL的查詢運行正常,但是當我把MySQL的查詢的查詢不能單獨工作,腳本的其餘部分執行罰款。據我所知,mysql_connect無法運行。

我不能使用cronjob,因爲我的需求不同,我使用需要觸發腳本,它應該連續運行,但不是間隔。

那麼,有沒有一種方法可以在需要在後臺運行的文件中創建MySqL Server連接?

回答

1

我已經設法弄清楚了這個問題。

我正在爲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 

工作得非常好,現在的實際插槽。

謝謝大家的建議!

0

我不完全確定你在問什麼(我失去了你的思路)......但是如果你試圖讓你的腳本永遠運行或者至少只要你的主機允許你(? )而不使用cronjob,那麼您可以使用腳本頂部的set_time_limit($ seconds)函數來設置主機允許的最大執行時間。在腳本結束時,讓它睡眠($秒),然後調用exec()再次執行。一定要考慮執行時間,否則你將錯過觸發器。

如果你的sql連接不工作,那麼你將需要弄清楚那裏發生了什麼。如果您發佈了一些代碼,我們可以幫助您進行調試。持久連接的mysql_connect和mysql_pconnect是您將用於建立與數據庫連接的命令。

+0

我只是想通過mysql_connect()命令得到的錯誤..它顯示錯誤號:2002.這是因爲腳本運行在後臺ie,而不是在瀏覽器中,但使用其他一些套接字.. !!我是否正確.. ..? – aBadAssCowboy

0

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