<?php
$dir = dirname(__FILE__);
$rootpath = explode("system",$dir);
define('ROOT', $rootpath[0]); //本系統根目錄的路徑
require(ROOT.'system/config.php');
//以上是為取得 ROOT 這個參數內容,絕對路徑。
//例如 C:\Inetpub\www\
set_time_limit(0);
//週一到週五執行
if(date(w)!=6 || date(w)!=0){
//$url = ROOT.'system/cron/aaa.php';
$url = 'http://'.$server_host.'/system/cron/aaa.php';
$msg_array[] = cron($url, array('db'=>1));
//$url = ROOT.'system/cron/aaa.php';
$url = 'http://'.$server_host.'/system/cron/aaa.php';
$msg_array[] = cron($url, array('db'=>2));
//$url = ROOT.'system/cron/bbb.php';
$url = 'http://'.$server_host.'/system/cron/bbb.php';
$msg_array[] = cron($url, array('db'=>1));
}
//執行完之後,把執行情況寫到某個檔案。
writeLog($msg_array);
function cron($url,$post_data=array()){
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_BINARYTRANSFER, 1);
curl_setopt($ch, CURLOPT_TIMEOUT, 600);
$output = curl_exec($ch);
curl_close($ch);
return $output;
}
function writeLog($msg_array){
//創建當月資料夾
$log_folder = ROOT.'system/log/cron/'.date("Ym");
if(!is_dir($log_folder)) mkdir($log_folder, 0775, true);
//建立檔案
$log_file= $log_folder.'/'.date("Y-md").'.txt';
$fp = fopen($log_file, "a+");
if($fp){
//$msg = $msg . "\r\n GET=".$_GET['sync_dbno'].;
foreach($msg_array as $value){
$value = $value."\r\n";
fputs($fp,$value);
}
}
fclose($fp);
}
?>
筆記:
原本打算使用這種:
D:\PHP\php.exe -f "C:\Inetpub\www\system\cron.php"
測試後,curl 似乎不能使用實體路徑,要用 http:// 這種 url 才行。
所以變成:
D:\PHP\php.exe -f "http://192.168.1.1/system/cron.php"
結果程式在我的電腦測試正常後,丟到公司 Windows 2003 Server 卻無法執行。工作排程不行,黑底白字的命令提示字元也不行。可能因為伺服器是用 IIS6.0 ,而我的執行環境是 Apache 。
會出現錯誤訊息:Could not open input file
矛盾:curl 要用 url,但 php + iis 寫到工作排程,卻要用實體路徑。
最後決定使用 IE ~~
"C:\Program Files\Internet Explorer\iexplore.exe" "http://192.168.1.1/system/cron.php"
用 IE 就可以去打開 url。
不過這樣一來,桌面每天都會開一個瀏覽器,而且不會自己關掉。所以再加這段自動關閉的 JavaScript:
<script>
function closeWindow(){
window.opener = null;
window.open("", "_self", "");
window.close();
}
setTimeout("closeWindow();", 3000 );
</script>
疑問:
curl 真的不使用實體路徑嗎?
PHP + IIS,不能使用 url ?
沒有留言:
張貼留言