2010-05-18 84 views
5

我想創建一個不屬於php上傳限制的上傳腳本。 可能有一些情況需要上傳2GB或更大的文件,我不希望將整個服務器的執行更改爲32MB以上。用php直接寫入磁盤

有沒有辦法直接從PHP寫入磁盤?

您可能會建議某人使用什麼方法來完成此操作?我已經閱讀了堆棧溢出,但還沒有完全找到我想要做的。

回答

1

使用PHP上傳大於PHP允許的限制的文件是不可能的,這很簡單。

可能的解決方法包括using a client-side technology - like Java,不確定Flash和Javascript是否可以執行此操作 - 將原始文件「拆分」爲較小的塊。

2

簡單的答案是你不能因爲apache處理髮布數據的方式。

如果你堅持要更大的文件上傳,並仍然使用php作爲後端,你可以使用php sockets API編寫一個簡單的文件上傳接收器,並將其作爲獨立服務運行。一些好的細節可以在http://devzone.zend.com/article/1086#Heading8

1

你可以做一些有趣的事情基於PHP的套接字。你有沒有考慮用Java編寫一個applet將文件上傳到監聽的PHP守護進程?這可能不適用於大多數專業託管服務提供商,但如果您正在運行自己的服務器,則可以使其工作。請看下面的順序:

  1. 小程序啓動時,將請求發送到PHP打開一個監聽套接字
    1. (你可能不得不用Java編寫一個基本的網頁瀏覽器,使這項工作)
  2. Java小程序讀取文件系統,並上傳到通過套接字的PHP在步驟1

不清晰的方式牛逼創建的文件做到這一點,但如果你在你的php.ini文件中禁用了PHP腳本超時,那麼你可以做一些工作。

2

儘管這是一篇舊文章,但您在尋找解決方案來處理使用PHP進行大文件上傳時,可以通過Google輕鬆找到它。 我仍然不確定是否可以上傳增加內存限制的文件,但我認爲這很有可能。在尋找解決這個問題的辦法時,我發現了矛盾的來源。 PHP手冊狀態

post_max_size:設置允許的發佈數據的最大大小。 此設置也會影響文件上傳。 要上傳大文件,此值必須 大於upload_max_filesize。如果 內存限制由您的 配置腳本啓用,memory_limit也會 影響文件上載。一般來說 說,memory_limit應該是 大於post_max_size。 (http://php.net/manual/en/ini.core.php

......這意味着您的內存限制應該比您要上傳的文件大。然而,在php.net其他用戶(拉格泰姆在愛麗絲DSL點com)指出:

我不相信神話「memory_size」應該是 上傳的文件大小。這些文件是 絕對不會保存在內存中...... 取而代之上傳1MB的塊每個 存儲在/ var/tmp下,之後在 下重建/ tmp,然後移動到 web /用戶空間。

我運行Linux開箱即用的只有64MB RAM ,memory_limit的設置爲16MB ,並在所有上傳大小的文件約100MB 是沒有問題的! (http://php.net/manual/en/features.file-upload.php

他報告了垃圾收集器的一些其他相關問題,但也說明了如何解決它們。如果是這樣,上傳的文件大小可能會增加內存限制。 (但是,請注意,另一件事可能是處理上傳的文件 - 那麼你可能需要將它加載到內存中)

我正在寫這個,之前我嘗試使用PHP自己處理大文件上傳,因爲我正在評估使用php或python執行此任務。