2011-06-21 85 views
5

我在tmp目錄中創建文件的功能有問題,例如tmpfile()tempnam()。他們似乎都沒有寫信給tmp並返回錯誤。 upload_tmp_dir在php ini中設置,文件上傳工作正常。PHP無法找到tmp目錄

當調試這個錯誤時,我發現sys_get_temp_dir()得到了tmp目錄的位置,不幸的是我的PHP版本(5.1.6)不支持它。我也看到,使用下面的方法取代的sys_get_temp_dir()功能:

if (!function_exists('sys_get_temp_dir')) { 
    function sys_get_temp_dir() { 
    if (!empty($_ENV['TMP'])) { return realpath($_ENV['TMP']); } 
    if (!empty($_ENV['TMPDIR'])) { return realpath($_ENV['TMPDIR']); } 
    if (!empty($_ENV['TEMP'])) { return realpath($_ENV['TEMP']); } 
    $tempfile=tempnam(__FILE__,''); 
    if (file_exists($tempfile)) { 
     unlink($tempfile); 
     return realpath(dirname($tempfile)); 
    } 
    return null; 
    } 
} 

但存在$ _ENV數組中的tmp目錄中沒有提及,正如我前面提到的tempnam()失敗。

而且open_basedir的是沒有設置這我聽說可能會導致類似的問題

我怎樣才能找出的tmp目錄或者是否甚至還成立?
這是一個Apache服務器配置問題或PHP?

感謝您的幫助

+1

檢查你的php.ini。你應該在那裏找到目錄。 – Colum

+1

它會被稱爲?謝謝 – DonutReply

+0

有不同的變數。我在upload_tmp_dir和session.save_path下找到了該目錄。但是PHP默認是/ tmp – Colum

回答

1

TMP,TEMP(也許TMPDIR)是有效僅在Windows上,通常POI登錄到C:\Windows\TEMP。在Linux上,默認臨時位置是/tmp。要解決此問題(與tempnam()函數一起使用),您可以在您的網站空間的某個位置創建一個臨時文件夾,指定適當的訪問權限並將其作爲第一個參數傳遞給上述函數。

不是一個很好的解決方案,但總比沒有好。

2

你可以設置在你的php.ini上傳臨時目錄 - 這樣的事情應該工作:

upload_tmp_dir=/your-www/tmp/ 

此外,如果您不能編輯PHP的.ini或者不想做全球,你可以在你的腳本開始使用:

ini_set('upload_tmp_dir','/your-home-www/tmp/'); 
0

也許不是最乾淨的,但這個工程在我的舊5.1.6安裝:

function get_temp_path() { 
    static $path = null; 
    if ($path !== null) return $path; 
    $file = tmpfile(); 
    $meta = stream_get_meta_data($file); 
    fclose($file); 
    $path = dirname($meta['uri']); 
    return $path; 
} 
0

我有同樣的問題和解決辦法是改變Apache的配置,露出TEMP變量PHP,看到this post

0

對於像我這樣的新手提示:我認爲PHP無法從我的臨時文件夾移動東西,但由於文件夾的相對位置,我只是感到困惑。這可能適用於其他人,所以我會解釋,儘管它與這個具體問題非常相關(因爲這個具體問題對於像我這樣的新手來說可能是一個搜索結果)。

我的問題是,我在/ var/www/html/user /中調用了一個上傳表單,從/ var/www/html /裏面的一個functions.php文件到一個profile.php文件。 php文件在/ var/www/html /中。上傳的文件最終打算登陸/ var/www/html/uploads。這最終意味着我的大部分對upload.php和uploads/functions.php的引用分別被寫爲「../uploadphoto.php」或「../uploads/[etc.jpg]」,以便步驟回到html /從html/user /(其中回顯的代碼在html/user/profile.php中)。這導致我直觀地在uploadphoto中使用以下命令。PHP沒有考慮它:

move_uploaded_file($_FILES["file"]["tmp_name"][0], "../uploads/$filename") 

看到問題了嗎? uploadphoto.php和uploads /在同一個目錄下,所以我不需要../這裏。幾個小時後,我確定我再次搞亂我的文件夾權限,因爲我是圖像上傳的新手。我忘記檢查更簡單的錯誤。希望這可以幫助別人。