<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
<channel>
<title><![CDATA[向东博客 专注WEB应用 构架之美 --- 构架之美，在于尽态极妍 | 应用之美，在于药到病除]]></title> 
<link>http://jackxiang.com/index.php</link> 
<description><![CDATA[赢在IT，Playin' with IT,Focus on Killer Application,Marketing Meets Technology.]]></description> 
<language>zh-cn</language> 
<copyright><![CDATA[向东博客 专注WEB应用 构架之美 --- 构架之美，在于尽态极妍 | 应用之美，在于药到病除]]></copyright>
<item>
<link>http://jackxiang.com/post//</link>
<title><![CDATA[[实践OK]用php实现上传文件时显示进度条（保证可以运行），用PHP Session和Javascript实现文件上传进度条。]]></title> 
<author>jack &lt;xdy108@126.com&gt;</author>
<category><![CDATA[Php/Js/Shell/Go]]></category>
<pubDate>Mon, 15 Mar 2010 09:40:00 +0000</pubDate> 
<guid>http://jackxiang.com/post//</guid> 
<description>
<![CDATA[ 
	本来这篇文章早应该写了，由于其他原因一直没有时间完成。这两天抽空写了一个简单的版本，发出来大家一块学习吧。<br/><br/>prerequire:<br/>php &gt;5.2*<br/>APC<br/>jquery<br/>add below to your php.ini<br/><br/>extension=&quot;/usr/local/php5212/lib/php/extensions/no-debug-zts-20060613/apc.so&quot;<br/>apc.rfc1867 = On<br/>apc.enabled=1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # default = 1<br/>apc.shm_segments=1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;# default = 1<br/>apc.shm_size=128&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;# default = 30<br/>apc.ttl=7200&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;# default = 0<br/>apc.user_ttl=7200&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # default = 0<br/>apc.num_files_hint=1024&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # default = 1000<br/>apc.mmap_file_mask=/tmp/apc.XXXXXX&nbsp;&nbsp;# default = no value<br/>apc.enable_cli=1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;# default = 0<br/><br/>program details:total 4 files (3 php and 1 js )<br/> upload.php&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//程序的入口，生成表单以及调用js<br/>&lt;script src=&quot;http://ajax.googleapis.com/ajax/libs/jquery/1.4.0/jquery.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;<br/>&lt;script src=&quot;upload.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;<br/>&lt;?php<br/>&nbsp;&nbsp; $unique_id = uniqid(&quot;&quot;);<br/>?&gt;<br/><br/>&lt;form enctype=&quot;multipart/form-data&quot; id=&quot;upload_form&quot; action=&quot;target.php&quot;<br/>method=&quot;POST&quot;&gt;<br/>&lt;input type=&quot;hidden&quot; name=&quot;APC_UPLOAD_PROGRESS&quot; id=&quot;progress_key&quot;<br/>value=&quot;&lt;?php echo $unique_id;?&gt;&quot;/&gt;<br/>&lt;input type=&quot;file&quot; id=&quot;test_file&quot; name=&quot;test_file&quot;/&gt;&lt;br/&gt;<br/>&lt;input&nbsp;&nbsp;type=&quot;submit&quot; value=&quot;Upload!&quot; onclick=&quot;startProgress(&#039;&lt;?php echo $unique_id;?&gt;&#039;);return true;&quot;/&gt;<br/>&lt;/form&gt;<br/><br/>&lt;div id=&quot;upstatus&quot; style=&quot;width: 500px; height: 30px; border: 0px solid ##ffffde; color:#796140;&quot;&gt;&lt;/div&gt;<br/>&lt;div id=&quot;progressouter&quot; style=&quot;width: 500px; height: 20px; border: 3px solid #de7e00; display:none;&quot;&gt;<br/>&lt;div id=&quot;progressinner&quot; style=&quot;position: relative; height: 20px; color:#796140; background-color: #f6d095; width: 0%; &quot;&gt;&lt;/div&gt;<br/>&lt;/div&gt;<br/>ProcessBar.php&nbsp;&nbsp;//ajax 请求的数据来源.<br/>&lt;?php<br/>if(isset($_GET[&#039;progress_key&#039;])) &#123;<br/>&nbsp;&nbsp;$status = apc_fetch(&#039;upload_&#039;.$_GET[&#039;progress_key&#039;]);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $json = array(<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#039;per&#039;=&gt;$status[&#039;current&#039;]/$status[&#039;total&#039;]*100,<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#039;total&#039;=&gt;round($status[&#039;total&#039;]/1024),<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#039;current&#039;=&gt;round($status[&#039;current&#039;]/1024)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;);<br/> $finalStatus= json_encode($json);<br/> echo $finalStatus;<br/>&#125;<br/>else<br/>&#123;<br/>echo &quot;You are bad man!!!&quot;;<br/>&#125;<br/>?&gt;<br/>target.php //用于上传文件到相应的目录<br/>&lt;?php<br/>$filepath = &quot;images/&quot;;<br/>$filepath = $filepath . basename( $_FILES[&#039;test_file&#039;][&#039;name&#039;]);<br/>move_uploaded_file($_FILES[&#039;test_file&#039;][&#039;tmp_name&#039;], $filepath);<br/>echo &quot;upload finish,please check your images directory!!!!&quot;;<br/>?&gt;<br/>upload.js //本文用到的js<br/><br/>function getProgress(upid)<br/>&#123;<br/>&nbsp;&nbsp;var url = &quot;ProcessBar.php&quot;;<br/>&nbsp;&nbsp;$.getJSON(<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;url,<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#123; progress_key: upid &#125;,<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;function(json)&#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $(&quot;#progressinner&quot;).width(json.per+&quot;%&quot;);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $(&quot;#upstatus&quot;).html(&#039;filesize:&#039;+json.total+&#039;KB&#039;+&#039; &#039;+&#039;uploaded:&#039;+json.current+&#039;KB&#039;);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (json.per &lt; 100)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; setTimeout(function()&#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;getProgress(upid);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#125;, 10);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#125;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; else<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $(&quot;#upstatus&quot;).html(&quot;Upload finish,processing file,please wait a moment&quot;);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#125;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#125;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;)<br/>&#125;<br/><br/><br/>function startProgress(upid)<br/> &#123;<br/> $(&quot;#progressouter&quot;).css(&#123; display:&quot;block&quot; &#125;);<br/> setTimeout(function()&#123;<br/> getProgress(upid);<br/> &#125;, 100);<br/> &#125;<br/><br/>经过IE和Firefox的测试，完全可以运行。<br/>来源:http://blog.sina.com.cn/s/blog_4d8a2c970100h7i9.html<br/><br/>再次可以参考：http://www.toplee.com/blog/463.html#comment-38076<br/><br/>用PHP Session和Javascript实现文件上传进度条：<br/>PHP5.4后有原生态支持这个进度的功能，用的是Session实现的，感觉有点鸡肋，呵呵。<br/>http://www.pureweber.com/article/php-upload-progress/<br/>代码测试Ok：https://github.com/pureweber/samples/blob/master/php-upload-progress/upload.php<br/>这玩意只支持Apache+PHP，对Nginx类的FastCGI没法获取到进度值，<br/>所以，PHP还得加油啊，配置Apache下支持PHP的配置方法在这儿：<br/>http://jackxiang.com/post/4155/&nbsp;&nbsp;位于最后面。<br/>最后，测试小文件的进度方法：QQPCNetFlow 网速限定后可看到进度，PHP接受完后这个$_FILES数组才出现了，这个tmp文件也就是最后一次成型，不能断点，是Http协议决定的。
]]>
</description>
</item><item>
<link>http://jackxiang.com/post//#blogcomment</link>
<title><![CDATA[[评论] [实践OK]用php实现上传文件时显示进度条（保证可以运行），用PHP Session和Javascript实现文件上传进度条。]]></title> 
<author> &lt;user@domain.com&gt;</author>
<category><![CDATA[评论]]></category>
<pubDate>Thu, 01 Jan 1970 00:00:00 +0000</pubDate> 
<guid>http://jackxiang.com/post//#blogcomment</guid> 
<description>
<![CDATA[ 
	
]]>
</description>
</item>
</channel>
</rss>