2012-07-30 20 views
3

我在通過PHP上傳大文件時遇到了一個奇怪的問題(通過Drupal,儘管這不是問題)。PHP post_max_size在Plesk/IIS上由主值覆蓋的本地值?

基本上,我的文件上傳失敗,因爲post_max_size限制已達到,即使本地指令設置爲96M,文件爲25M。

我確保一切正確,包括max_input_timemax_upload_filesize和IIS FastCGI空閒時間。所有這些都很大,而不是問題。

我通過Plesk覆蓋了post_max_size指令,我認爲這個指令將更改存儲在註冊表值中。在域上運行phpinfo()會爲所有指令顯示正確的本地值和主值... 96M本地,12M主節點。

非常奇怪的是,當我將php.ini中的主人post_max_size從12M更改爲96M(並確保更改已生效),它正常工作!將主值更改回12M(並保持96M的本地值)會立即導致上傳再次失敗。

這是PHP中的錯誤,還是我做錯了?

+0

問題是什麼?你有什麼嘗試? – 2012-07-30 21:52:50

+2

對不起,點擊'標籤'字段中的回車鍵來提交一個標籤,並且在我寫完問題之前提交了所有的東西。 – 2012-07-30 21:56:06

+0

我取消了我的倒票,但無法取消近距離投票,對不起。我可能有點快捷。 – vascowhite 2012-07-30 21:57:50

回答

2

事實證明,在Windows上,您只能設置每個目錄標記爲PHP_INI_USER的ini指令。不幸的是,upload_max_filesizepost_max_size都是PHP_INI_PERDIR。來自PHP文檔http://php.net/manual/en/configuration.changes.php

該目錄的設置對於從該目錄或其任何子目錄運行的任何腳本都是有效的。該鍵下的值應該具有PHP配置指令的名稱和字符串值。值中的PHP常量不被解析。 但是,只能通過PHP_INI_USER設置可更改的配置值,PHP_INI_PERDIR值不能。

因此,即使具有的Plesk改變這些指令的接口,即使phpinfo()拾起在他們身上,他們什麼也不做改變實際的最大上傳大小。 Plesk不應允許您在Windows上更改這些設置,並且phpinfo()不應報告更改,但您可以執行哪些操作。

1

檢查PHP的upload_tmp_dirpost_max_size以及在php.ini和任何覆蓋的upload_max_filesize(本地php.ini或任何的.htaccess例如)

編輯:應當指出的是,phpinfo()函數不能在爲確定是否有任何的依據覆蓋將在請求期間(也就是當文件上傳發生時)可用,因爲它將在響應期間被處理。

+0

'post_max_size'和'upload_max_size'都被覆蓋(通過註冊表,在Windows上執行的唯一方式)到'96M',並且phpinfo()反映了這一事實。 – 2012-07-30 22:24:31

+0

那你如何凌駕他們呢?請記住,您無法在響應HTTP請求的腳本中使用ini_set()覆蓋它們(因爲它們不會被覆蓋,直到太遲)。 – 2012-07-30 22:30:37

+0

它們正在被註冊表項覆蓋。我正在使用Plesk控制面板,它有一個GUI來更改每個域的PHP設置,並在後臺將它們寫入註冊表,因爲這是在Windows上設置每個域指令的唯一方法。 'ini_set()'不被使用。 – 2012-07-30 22:42:36

0

我在Plesk有類似的問題。您是否編輯過Plesk中的任何模板?我知道它何時運行cron作業,如果您沒有通過Plesk進行配置編輯,則可能會丟失某些配置編輯。

但你的.htaccess文件呢?您也可以在那裏設置這些限制,並且根據您的Plesk配置,可能會更好地進行這些更改。

+0

已經學會了在Plesk之外永遠不會改變任何東西的難題!據我所知,Windows上帶有IIS的Plesk不使用.htaccess文件,你只能通過Plesk GUI改變web.config和註冊表中的設置 – 2012-07-31 17:10:57

+0

啊,右邊的IIS,max_file_uploads怎麼樣?如果你的upload_max_filesize * max_file_uploads大於你的memory_limit或post_max_size,那可能是一個問題。我想象的是memory_limit,max_execution_time,max_input_time,upload_max_filesize,max_file_uploads。 – roberthernandez 2012-07-31 17:19:09

+0

所有這些相關的指令都設置得足夠高,I'v甚至修改了IIS設置,例如FastCGI空閒超時,最大請求大小等。post_max_size和max_upload_filesize都設置爲96M,但我只上傳1個25M文件。當將全局php.ini指令設置爲'96M'時,它會很好地上傳,而當你將它們還原爲'12M'時會失敗。 – 2012-07-31 17:28:22