2014-10-09 139 views
0

我有一個網站進行媒體轉換,用戶可以上傳視頻,音頻或圖像文件,並將其轉換爲3種流行格式。轉換腳本工作正常,但我遇到了文件上傳到tmp目錄的問題。我已經嘗試了兩種情況,我都很好,但都不起作用,在我看來是權限相關,但我似乎可以解決這個問題。 我現在在本地工作,而我正在解決問題。更改PHP臨時目錄

方案1:

  • 文件被上傳到默認的本地tmp目錄(C:\ WINDOWS \ tmp目錄) - 工作正常
  • 嘗試使用上傳tmp文件運行轉換腳本,它不」將不起作用 - 運行命令行工作完全正常,雖然

方案2:

  • 文件I ŝ上傳到目錄中我已經給IIS_IUSRS的完全控制(用於測試)和文件不會上傳 - 是該目錄的拼寫是否正確(我改變php.ini中的upload_tmp_dir值)

兩個網站的JavaScript將XMLHttpRequest發送到PHP文件,以及PHP文件本身駐留的站點都是IIS站點,所以我假設該腳本正在以IIS_IUSRS運行。

編輯:不再爲場景1創建Temp文件,無法弄清楚爲什麼我假設使用權限玩弄了一些東西,因爲代碼沒有改變。我已經給修改IIS_USRS和用戶嘗試讓它再次運行,但沒有運氣:(儘管錯誤日誌仍然寫入同一文件夾...怪異

注意:「tmp_name」值的$我發送的_FILES變量仍然具有「C:\ WINDOWS \ Temp \'文件名'」的值,但該文件不存在

編輯:另一個新的開發,它顯示它不是權限問題,因爲我可以創建一個臨時文件通過$ temp_file = tempnam(sys_get_temp_dir(),'Test');但它顯然不包含上傳的數據,因此它不能解決我的問題

+0

我從來沒有使用IIS,但也許使用/而不是\目錄分隔符?或者使用\\,因爲PHP將\視爲轉義元字符? – 2014-10-09 14:03:01

+0

你是正確的...在我的代碼中,我有\\這不應該是問題,因爲當我有一個文件坐在目錄我可以硬編碼源文件和目標文件,它工作正常 - 但感謝您輸入 – mgrenier 2014-10-09 14:05:22

+0

在php.ini中怎麼樣?回聲phpinfo()時,設置看起來不錯嗎? – 2014-10-09 14:07:13

回答

0

這不是一個解決的問題和更多的解決方法這個問題似乎與01有關$_FILES['file']['tmp_name'];

當我回應內容時,它看起來像我期望的,但沒有出現文件。因此,我不必利用自然發生的這一過程,而必須採取手動方法。我所做的是以下幾點:

創建一個臨時文件

$temp_file = tempnam(ini_get('upload_tmp_dir'), 'php');

然後從$ _ POST請求的過程中創建的臨時文件添加的內容。 (其中一些是如何在$ _FILES變量即使該文件是不是當我看到的目錄)

file_put_contents($temp_file, file_get_contents($_FILES['file']['tmp_name'])); 

的,我有我的處理臨時文件。

0

由於APPLICATION POOLS上的一項設置,PHP將忽略upload_tmp_dir。 這不是php-cgi.exe或php.ini或權限問題。 轉到發生問題的網站的應用程序池: 1.右鍵單擊 2.選擇高級設置 3.滾動到LOAD USER PROFILE並將其設置爲FALSE。

爲我做了詭計。