2010-10-25 25 views
0

短故事:open_basedir不會讓我寫文件,但目錄似乎是正確的?

我在我的php腳本中獲得了open_basedir限制 - 一個簡單的「測試將新文件寫入磁盤」腳本。它告訴我,我有open_basedir設置正確,文件位於正確的位置 - 但沒有運氣,每次都是相同的錯誤。我在這個網站上搜索了類似的open_basedir問題,但是我沒有看到這個問題 - 目錄看起來不錯,但仍然會引發錯誤。

我猜測的問題是什麼:
1)的open_basedir不工作的方式,我認爲它確實
2)我的設置是錯誤的,我只是沒有看到它
3)它實際上其他東西,如IIS讀/寫權限等
4)???

長的故事:

我工作用PHP在IIS服務器上,我試圖讓下面的代碼片段工作(一個簡單的寫文件測試):

date_default_timezone_set('America/Chicago'); 
$myFile = 'testfile.txt'; 
$fh = fopen($myFile, 'w') or die("can't open file"); 
$stringData = "Some Text\n"; 
fwrite($fh, $stringData); 
$stringData = "Some More Text\n"; 
fwrite($fh, $stringData); 
fclose($fh); 

這PHP腳本位於C:\的Inetpub \ wwwroot的\ WEBDIRECTORY \ test_write.php我的服務器上

這裏是我的php.ini中的open_basedir:
的open_basedir = C:\的Inetpub \ wwwroot文件:C:\的Inetpub \ wwwroot \ WEBDIRECTORY

無論何時我打開腳本的頁面,我都希望看到沒有輸出,然後當我檢查時應該在服務器上寫入一個新文件。這是我取而代之:

警告:fopen():open_basedir 限制生效。 文件(TESTFILE.TXT)不是 允許路徑(S)內:(C:\的Inetpub \ wwwroot的) 在 C:\的Inetpub \ wwwroot的\ WEBDIRECTORY \ test_write.php 第5行警告: 的fopen( TESTFILE.TXT):未能打開 流:操作 ç不允許:\的Inetpub \ wwwroot的\ WEBDIRECTORY \第5行無法打開文件

test_write.php 我已經嘗試了很多排列組合:最初open_basedir行只是
open_basedir = c:\ inetpub \ wwwroot

......但那也行不通。我也試着輸入testfile.txt(c:\ inetpub \ wwwroot \ WEBDIRECTORY \ testfile.txt等)的絕對路徑,而不僅僅是文件本身的名稱,並且我一直得到相同的錯誤信息。

任何想法?非常感謝你的幫助。

+0

這裏有兩篇文章可能有所幫助。這可能是你如何進入路徑。 http://bytes.com/topic/php/answers/7819-open_basedir-errors(他在線索底部找到答案)。 http://www.kavoir.com/2009/06/php-open_basedir-in-phpini-to-limit-php-file-accesses-to-a-certain-directory.html(open_basedir的一般描述) – Jim 2010-10-26 14:24:54

回答

1

好了,很抱歉浪費大家的時間 - 原來這是一個服務器設置我的系統管理員已經爲我設置。 (我是新來這個,所以我會在我的理解一般條款解釋)

他會設定,讓服務器將不解析地址爲,除非你希望某些類型的網站目錄的任何文件在網站上查找,如.htm,.html,.php,.jpg等。我試圖閱讀的文件是.txt。

所以,我寫了一些測試代碼:

$test = realpath('c:\inetpub\wwwroot\WEBDIRECTORY\testfile.php'); 
echo ("test = $test\n"); 
if($test == FALSE){ 
echo ("... is FALSE\n"); 
} 

$test = realpath('c:\inetpub\wwwroot\WEBDIRECTORY\testfile.txt'); 
echo ("test = $test\n"); 
if($test == FALSE){ 
echo ("... is FALSE\n"); 
} 

其中後及時返回本:

測試= C:\的Inetpub \ wwwroot的\ WEBDIRECTORY \ testfile.php
測試=是FALSE

所以,真實路徑被拒絕返回地址以.txt結尾的任何東西,但比樂意這樣做的PHP文件了。這意味着WHENEVER我放入一個非法的(在basedir中)文件名以非法擴展名結尾,服務器將該地址解析爲不是「C:\ inetpub \ wwwroot \ WEBDIRECTORY \ testfile.txt」而是「」。當然,一個空字符串不會在basedir中,返回open_basedir限制錯誤。

BIZARRE!但現在我終於將它追溯到源頭了。感謝所有的提示!它幫助我完成了淘汰的過程,並將其歸結於此。

-1

它似乎是一個權限問題。檢查C:\ inetpub \ wwwroot \ WEBDIRECTORY \上的權限如果需要特殊權限,有時您必須更改.PHP腳本在寫入時的權限。通常,您需要目錄和腳本集,而不僅僅是一個或另一個。

下面是PHP手冊好的劇本打開一個文件進行寫:

$文件名=「的test.txt」; $ somecontent =「將其添加到文件\ n」;

//讓我們確保文件存在並且首先是可寫的。 如果(is_writable($文件名)){

// In our example we're opening $filename in append mode. 
// The file pointer is at the bottom of the file hence 
// that's where $somecontent will go when we fwrite() it. 
if (!$handle = fopen($filename, 'a')) { 
    echo "Cannot open file ($filename)"; 
    exit; 
} 

// Write $somecontent to our opened file. 
if (fwrite($handle, $somecontent) === FALSE) { 
    echo "Cannot write to file ($filename)"; 
    exit; 
} 

echo "Success, wrote ($somecontent) to file ($filename)"; 

fclose($handle); 

}其他{ 回聲 「文件$ filename是不可寫」; }

+0

嘿!謝謝,我會試一試,讓你知道會發生什麼! – larsiusprime 2010-10-25 21:04:01

+0

它不是。權限在這裏無關 – 2010-10-25 21:06:56

+0

好的,當我使用該測試文件時得到了這個: 警告:is_writable():open_basedir限制有效。文件(TESTFILE.TXT)不在允許路徑(多個)內:在C:(\的Inetpub \ wwwroot的c)中:\的Inetpub \ wwwroot的\ WEBDIRECTORY \ test_write.php第6行的文件TESTFILE.TXT不可寫 – larsiusprime 2010-10-25 21:09:00

相關問題