2016-07-06 77 views
0

我想從web根目錄上的文件夾下載文件。比方說,我想這個文件:從/ var文件夾下載PHP文件而不使用相對路徑

/var/pdfs/test.pdf 

我的代碼是:

$name = "test.pdf"; 
$url = "/var/pdfs/" . $name; 
if (file_exists($url)) { 
    header("Content-Type: application/pdf"); 
    header("Content-Transfer-Encoding: Binary"); 
    header("Content-disposition: attachment; filename='" . basename($url) . "'"); 
    readfile($url); 
} else { 
    echo "Not found: $url"; 
} 

的問題是,我總是得到Not found: $url回聲。

我的文件讀取權限:

[email protected]:/var/pdfs$ ls -la 
total 6484 
drwxr--r-- 2 thecrafter root   4096 Jul 7 00:19 . 
drwxr-xr-x 13 root  root   4096 Jul 7 00:16 .. 
-rw-r--r-- 1 thecrafter thecrafter 6629018 Jul 7 00:18 test.pdf 

和目錄也:

[email protected]:/var$ ls -la | grep pdfs 
drwxr--r-- 2 thecrafter root 4096 Jul 7 00:19 pdfs 

難道我錯過了什麼?哪裏有問題?

編輯1

剋日什托夫·Duszczyk注意的是,如果我給執行到pdfs目錄權利的問題就解決了。事實上,我給它755,它的工作。任何想法爲什麼會發生?

+0

pdfs文件夾有讀取權限嗎? –

+0

恕我直言,也有同樣的問題,檢查它。 http://stackoverflow.com/a/17896538/6557808 – Sylogista

+0

@KrzysztofDuszczyk是的,我編輯了我的問題。 – TheCrafter

回答

1

的問題(而不是在這種情況下,但我離開它去幫助別人)

如果知道該文件實際上存在於磁盤上,您file_exists()可能是由意中保護文件安全的措施阻止/var/pdfs/未經授權的訪問。這是從文檔上file_exists

警告:該函數返回FALSE爲不可訪問,由於 安全模式的限制文件。但是,如果它們位於safe_mode_include_dir中,則這些文件仍可以包含在它們中間,如果它們是 。

該解決方案(未在這種情況下再次,但可以幫助類似的症狀)

你想要的目錄添加到safe_mode_include_dir設置。找到設置在php.ini,取消它,並添加目錄:

safe_mode_include_dir = /var/pdfs/ 

如果這仍然不起作用,你可能還需要將該目錄添加到您的PHP包含路徑,無論是在php.ini設置include_path ,或者在你的腳本的頂部,與下面的一行:

$path = '/var/pdfs' 
set_include_path(get_include_path() . PATH_SEPARATOR . $path); 

注意PHP刪除safe mode設置與5.4版本,所以如果你有最近的PHP安裝,您的問題可能在其他地方。

+0

我試着在我的php腳本的頂部添加'ini_set(「safe_mode_include_dir」,「/ var/pdfs /」);''。我沒有工作,所以我嘗試了你的第二個解決方案,但它也沒有工作。 – TheCrafter

+0

我想你誤會了。我沒有建議你使用'ini_set'來改變safe_mode_include_dir。我建議你直接在'php.ini'中進行修改。除了第一個(不是替代方案)之外,第二個建議是,所以無論哪種方式,您首先需要更改'php.ini'。 – BeetleJuice

+0

好的。我打開了我的'/ etc/php5/apache2/php.ini',但沒有'safe_mode_include_dir'選項。甚至沒有註釋掉。我應該追加它嗎? – TheCrafter

相關問題