2011-08-25 87 views
3

是否可以掃描/由opendir和SCANDIR家用/目錄。當我嘗試執行腳本它說權限被拒絕我應該怎麼做?掃描/家庭/由opendir()

<?php 

$dir = '/home/'; 
$dirs = scandir($dir); 
?> 
<pre> 
<?php print_r($dirs); ?> 
</pre> 
+0

你可以,可以,但你需要對主目錄權限這樣做。 – Prisoner

回答

2

爲了安全起見,PHP定義了一個「BASEDIR」,下面你不允許訪問。正如Aleks G所說,還有文件權限需要考慮。 How can I relax PHP's open_basedir restriction?

湯姆·黑格的答案抄在這裏:

你也可以做到這一點很容易在使用Apache每個目錄的基礎上(假設這是關於如何解決BASEDIR限制

這個問題舉行會談您的Web服務器)配置文件(如httpd.conf)中

<Directory /var/www/vhosts/domain.tld/httpdocs> 
php_admin_value open_basedir "/var/www/vhosts/domain.tld/httpdocs:/var/www/vhosts/domain.tld/zend" 
</Directory> 

你也可以完全

解除限制
<Directory /var/www/vhosts/domain.tld/httpdocs> 
php_admin_value open_basedir none 
</Directory> 
+0

我試過了,但仍然無法訪問它仍然拒絕權限 – skuul

+0

然後,如其他答案所述,您需要啓用對apache進程的讀取權限。你可以'chmod g + rx -w/home'並將/ home文件夾的組從根目錄更改爲www-data(或者你的apache可以訪問的任何內容 - 必要時創建一個新組) – Deebster

0

我不是PHP程序員,但我認爲你的問題是,當PHP嘗試opendir時,它使用的是與apache具有相同的用戶ID,而這可能沒有讀取/ home目錄的權限。

你可以通過改變在/ home上的權限,或添加了apache用戶ID到任何集團擁有的家庭組所有權解決這個問題。

可能它是在你的Apache配置文件有問題。即使文件系統權限允許,您的httpd.conf文件也可能不允許訪問/ home。如果您的所有HTML文件都在/ var/www中,通常會出現這種情況。

httpd.conf中可能會被設置爲允許提供文件服務瞭解用戶的主目錄。在這種情況下,該權限將被授予/ home中的目錄,但不會授予/ home本身。

5

您可以使用is_readable('/home/')來檢查您是否有權限。如果沒有你需要確保目錄具有讀取權限,可能0755(rwxr-XR-X)

+0

是否有任何缺點/ home /在500多個網站的服務器上的chmod 755? – skuul

+0

在我的情況下,'scandir'是在'/ var/logs/project'上執行的,我必須確保所有文件夾,即'/ var','/ var/logs'和'/ var/logs/project'都是對於不在組中的用戶來說都是可讀和可執行的我做了'chmod 755/var','chmod 755/var/logs'和'chmod -R 755/var/logs/project'。 – arun

0

答案就在你的問題:這是一個權限問題。很可能,運行Apache的進程沒有權限讀取/home目錄(或者如果在CLI中運行,則爲您的usernamd)。在終端上手動執行此操作:

ls -ld /home 

並檢查屬性。