iT邦幫忙

0

在 server 端直接執行 php 的問題

php
chan15 5 年前5262 瀏覽

OS: Windows 2003
寫了一隻 bat,想要用 php -f 的指令執行 server 端某一隻 php
用 Server 排程去跑,bat 程式如下

C:\AppServ\php5\php.exe -f C:\AppServ\www\test\admin\test.php

用 browser 執行該網頁 code 有 work,但用 php -f 的話會有路徑問題

Warning: include_once(../config.inc): failed to open stream: No such file or directory in C:\AppServ\www\te\
st\admin\function.php on line 3

include 的方式改成 $_SERVER['DOCUMENT_ROOT'].'/function.php'; 也不行

請問這個問題該怎麼解決呢

1 個回答

8
wiseguy
iT邦超人 1 級 ‧ 5 年前
最佳解答

命令列模式下,是沒有 $_SERVER 這一群變數的。所以取 $_SERVER['DOCUMENT_ROOT'] 只會是空字串。

錯誤發生在 C:\AppServ\www\test\admin\function.php 第三行,請貼出這支程式前五行內容,別人才能幫你看是什麼錯誤吧?
另外那支 config.inc 位在哪個目錄下,也請貼出來。

看更多先前的回應...收起先前的回應...
chan15 iT邦新手 5 級 ‧ 5 年前 檢舉

wiseguy 您好
其實就是很單純的他不吃 ../ 這個相對路徑的語法
我知道下死絕對路徑即可,但又好像缺乏彈性

silly iT邦好手 2 級 ‧ 5 年前 檢舉

那就用兩次dirname()再串接config.inc吧,ex:
$configFile = dirname(dirname(__FILE__))."config.inc";

silly iT邦好手 2 級 ‧ 5 年前 檢舉

更正:(少了目錄分隔符號)
$configFile = dirname(dirname(__FILE__)).DIRECTORY_SEPARATOR."config.inc";

wiseguy iT邦超人 1 級 ‧ 5 年前 檢舉

可以考慮用 silly 的作法,以 __FILE__ 這個常數來取得目前 php 的絕對目錄,再去 include 你所要的 config.inc 檔案。
不過我是覺得奇怪,在 windows 版本的 php 中,就算是 / 與 \ 混用,php 也能正確抓到檔案所在,沒理由不吃 ../ 這種路徑。所以才請你貼出程式碼,看看是不是你寫錯什麼了。

我要發表回答

立即登入回答