2011-08-24 73 views
0

我有一個PHP/MySQL的問題:自動PHP腳本

我正在設計一個網站,採取XML飼料,並把它們放入一個MySQL表。從這張表中,我想讓mysql獲取這些新信息並執行一系列計算,然後更改數據庫另一部分中的字段。然後這個新更新的信息顯示在網站上。

我知道如何:

  • 從XML轉換到PHP
  • 地方這些變量到MySQL
  • 計算新的信息(與PHP的理論)

什麼我不「T得到的是: 我在哪裏把PHP腳本,告訴MySQL做計算和計算實際上是什麼。

這是否只是走在了數據庫的PHP文件,獲得由cron作業叫什麼名字?我不知道如何執行linux命令,但我想我可以學習如果需要。有沒有其他方法可以簡單地在服務器上放置一個腳本,並且每隔一小時左右調用一次腳本,並檢查是否添加了新表格,如果有,它會進行計算?

+1

我想你提到的解決方案是最好的; cron是定期執行腳本的最簡單方法。 – jeroen

回答

1

如果你想安排一個工作,而無需使用一個cron,理論上你可以設置你的網頁發出一個AJAX請求之一。

AJAX調用開火文件準備:

$.get("my-script.php"); 

頂myscript.php的:

$desiredUpdateInteval = 3600; #seconds 
    $dbLastUpdatedQuery = mysql_query("SELECT UPDATE_TIME FROM information_schema.tables WHERE TABLE_SCHEMA = '*database_name*' AND TABLE_NAME = '*table_name*'"); 
    $dbLastUpdated  = strtotime(mysql_result($dbLastUpdatedQuery,0,0)); 

    if((time() - $dbLastUpdated) > $desiredUpdateInterval){ 
    /* do something */ 
    } 

你應該注意到,有一個很大的開銷用這種方法,因爲你的數據庫是要在每一頁訪問中獲取。

+0

第二部分('UPDATE_TIME FROM information_schema.tables')+ 1非常好的方法! 我只是不想讓用戶活動控制時間,當php調用被放置在頁面中時。 – HBublitz

0

什麼叫「一個網站,需要 XML」是什麼意思? 如果XML採取的是你自己的PHP腳本,那麼你應該把你的重新計算呼叫那裏......如果有保存到數據庫的新XML。否則,你知道,不需要計算。

plcae時間戳屬性「LAST_UPDATED」在你的計算,結果表,更新它,如果新的XML趕到,檢查now() > last_updated + 3600,檢查是否超過了一個小時。

- > PHP僞的cronjob ...

3

是的,一個cronjob是你在找什麼。根據你的服務器操作系統風格(我假設linux),創建一個相當容易。在Debian系統中,您將腳本文件放入/etc/cron.hourly/,並且每小時運行一次。

要創建一個可以在命令行運行PHP腳本,格式如下:

#!/usr/bin/env php 
<?php 
    // do stuff... 
?> 

而且不要忘了chmod +x腳本。

0

你有一對夫婦選擇這裏。如果你想保持在分貝的東西,那麼你可以看看使用triggers。當更新/插入等事件發生時,觸發器將允許您執行某些操作。所以在你的場景中,當XML被饋入你的數據庫時,你可以觸發一些動作來執行計算,而不需要一個cron作業調用一個php文件來做同樣的事情。

另一種選擇是做一個cron作業,調用一個php文件,在你的計算中發生了一些變化。你將不得不啓動一個crontab(一些例子here - 搜索php),它調用一個php文件(你應該能夠將文件放在你喜歡的任何地方,你也可以訪問它,我會把它保存在網站文件夾中,但不在公共訪問,除非你想手動調用它的URL)每x小時取決於你的需求。如果你這樣做,你創建一個新的PHP文件,只需要檢查數據庫的變化,也許通過獲取表的最後一個ID並將其與您保存在文件系統上的文件中的以前的ID進行比較。如果發生變化,請執行所有必需的計算和更新,然後完成,直到稍後再次調用它爲止。

0

What I don't get is: where do I put the php script that tells mysql to do the calculations and what the calculations actually are.

自動=克朗。因爲沒有它,有人需要通過瀏覽器或CLI執行腳本。

現在,假設你已經有了一個PHP腳本做任務,並假設你有你的服務器的SSH接入,建立你只需要執行(從bash)的一個cron任務

crontab -e 

然後設置一個cron任務(假設爲每隔一小時)

*/60 * * * * /path/to/your/php/script.php 

如果你沒有一個SSH訪問和使用的cPanel,see How To using Cron in cPanel