2010-03-24 36 views
4

你可以在上傳文件之前運行一些腳本在PHP開始?例如,我在發佈upload.php,並在該文件中,我想先檢查他們的$ _SESSION,然後纔開始浪費帶寬,並將文件統計信息上傳到我的服務器。我在nginx上使用php 5.2.11。有沒有辦法在上傳開始之前運行一些腳本在PHP中?

<?php 
    if ($_SESSION['admin'] == 'YES') { 
    // do upload here 
    } else { 
    exit; 
    } 
?> 

回答

2

不可以。只有在文件上傳後,請求才會到達PHP引擎。

+0

這樣做的根本原因是上傳只是請求的主體部分中的大塊編碼數據。在PHP級別,您無法阻止客戶端向正文中的數據發出POST請求。在服務器級別,它在技術上是可能的(如果沒有在頭文件中找到有效的會話ID,請關閉連接),但我認爲除非您編寫自定義模塊等,否則不能在此級別配置Web服務器。在nginx中,您可以設置_client_max_body_size_ limit,但這是關於它。 – jholster 2010-03-24 22:41:13

1

不,因爲上傳是請求的一部分,並且在PHP甚至發揮作用之前完成。

There 可能是一種解決這個問題的方法,它使用基於PHP/Perl的上傳器的技術,以某種方式掛鉤上傳過程,但也可能沒有。特別是當你使用不同的網絡服務器時。

我會爲正確的會話快速執行基於Ajax的檢查,並將其綁定到您上傳文件的表單的submit事件。它可能需要半秒鐘,但對用戶來說完全不顯眼。

+0

爲什麼只是不顯示上傳表單給未經授權的用戶? – 2010-03-24 21:48:53

+0

@COl。彈片我假設他想確保會議沒有過期。 – 2010-03-24 21:58:48

0

在允許表單提交之前,您可以在提交表單的頁面上進行ajax調用以檢查其會話狀態。

+0

這不是一個答案。 Ajax不能使用,因爲它與常規形式一樣,並且可以很容易地避免 – 2010-03-24 21:47:25

+0

+1 - 對於所問問題來說,這是最接近有效解決方案的方法,儘管使用來自onsubmit的異步調用會有點愚蠢方法。 – symcbean 2010-03-24 21:50:42

+0

我認爲Col.無法閱讀。 – jps 2010-03-24 21:58:24

相關問題