天天看點

PHP使用APC擷取上傳檔案進度安裝APCapc.rfc1867實驗:下面的疑問就是是不是真有中間過渡狀态呢?

今天發現使用php的apc也能擷取上傳檔案的進度。這篇文章就說下如何做。

首先安裝apc的方法和其他php子產品的方法沒什麼兩樣,網上能找出好多

phpinfo可以看到apc的預設配置有:

PHP使用APC擷取上傳檔案進度安裝APCapc.rfc1867實驗:下面的疑問就是是不是真有中間過渡狀态呢?

看apc.rfc1867這個配置項:

<a href="http://cn2.php.net/manual/en/apc.configuration.php#ini.apc.rfc1867">http://cn2.php.net/manual/en/apc.configuration.php#ini.apc.rfc1867</a>

文檔說的是如果你上傳檔案的時候,在post中帶有apc_upload_progress字段,那麼apc會自動以這個值創造一個upload_key緩存

這個時候,使用者可以使用ajax再過來調用,就可以擷取到目前檔案上傳的狀态了

這個狀态包括:

apc.rfc1867=on

PHP使用APC擷取上傳檔案進度安裝APCapc.rfc1867實驗:下面的疑問就是是不是真有中間過渡狀态呢?

1

2

3

4

5

6

7

8

9

10

11

<code>apc.php</code>

<code>&lt;?php</code>

<code>if</code><code>(</code><code>$_files</code><code>[</code><code>'file'</code><code>][</code><code>'error'</code><code>] == upload_err_ok){</code>

<code>   </code><code>$path</code> <code>=</code><code>'/tmp/upload/'</code><code>;</code>

<code>   </code><code>$path</code> <code>.=</code><code>basename</code><code>(</code><code>$_files</code><code>[</code><code>'file'</code><code>][</code><code>'name'</code><code>]);</code>

<code>   </code><code>if</code><code>(move_uploaded_file(</code><code>$_files</code><code>[</code><code>'file'</code><code>][</code><code>'tmp_name'</code><code>],</code><code>$path</code><code>)){</code>

<code>      </code><code>// upload successful</code>

<code>        </code><code>echo</code> <code>'sucess'</code><code>;</code>

<code>   </code><code>}</code>

<code>}</code>

確定能通過網絡通路到頁面

<code>getprocess.php</code>

<code>print_r(apc_fetch(</code><code>"upload_6226f7cbe59e99a90b5cef6f94f966fd"</code><code>));</code>

<code>&lt;html&gt;</code>

<code>&lt;body&gt;</code>

<code>&lt;input type=</code><code>"hidden"</code> <code>name=</code><code>"apc_upload_progress"</code> <code>value=</code><code>"6226f7cbe59e99a90b5cef6f94f966fd"</code><code>/&gt;</code>

<code>&lt;input type=</code><code>"file"</code> <code>name=</code><code>"file"</code> <code>/&gt;</code>

<code>&lt;input type=</code><code>"submit"</code> <code>value=</code><code>"submit"</code> <code>/&gt;</code>

<code>&lt;/form&gt;</code>

<code>&lt;/body&gt;</code>

<code>&lt;/html&gt;</code>

這裡要注意的是,apc_upload_process 必須要放在上傳的file之前(這也是文檔中有寫到的),否則會出現warning,并且也無法得到process

PHP使用APC擷取上傳檔案進度安裝APCapc.rfc1867實驗:下面的疑問就是是不是真有中間過渡狀态呢?
PHP使用APC擷取上傳檔案進度安裝APCapc.rfc1867實驗:下面的疑問就是是不是真有中間過渡狀态呢?

按照這篇文章說的:http://donchevp.blogspot.com/2009/11/limiting-your-internet-connection-speed.html

設定rule - customer - 設定這一段代碼

<code>if</code> <code>(m_simulatemodem) {</code>

<code>     </code><code>// delay sends by 300ms per kb uploaded.</code>

<code>     </code><code>osession[</code><code>"request-trickle-delay"</code><code>] =</code><code>"1"</code><code>;</code>

<code>     </code><code>// delay receives by 150ms per kb downloaded.</code>

<code>     </code><code>osession[</code><code>"response-trickle-delay"</code><code>] =</code><code>"150"</code><code>;</code>

<code> </code><code>}</code>

修改這個request-trickle-delay

然後開啟simulate模式。

PHP使用APC擷取上傳檔案進度安裝APCapc.rfc1867實驗:下面的疑問就是是不是真有中間過渡狀态呢?

可以看到current的進度,而且可以看到沒有上傳完成的時候,rate字段是沒有的~~~so good~~