介绍了利用APC模块实现文件上传进度条的PHP方法,供大家参考,具体分析如下:

对php5.2以前的版本不能使用APC模块,因为之前没有APC模块。如果我们想使用APC模块上传进度条,我们必须php5.2或后。

自5.2以来,APC已经加入了一个东东叫apc_upload_progress,解决了一直以来困扰着大家的问题。它还缓存到内存的临时文件上传时的原始文件,并自动保存到硬盘的临时文件时达到设定值,有效地提高了内存的利用率。

其原理是给每个上传上传一个唯一的ID,当PHP脚本接收上传文件,解释器会自动检查$ _post数组的指定apc_upload_progress隐藏字段,它将成为缓存变量来存储有关信息上传,这样的状态信息可以通过上传ID访问文件上传脚本

APC是替代PHP缓存的缩写,它是PHP的免费开放优化代码缓存,用于提供免费、开放和健壮的体系结构来缓存和优化PHP的中间代码。

APC模块的参数配置,代码如下:

复制代码如下:名称默认多变的更新日志

1 php_ini_all apc.enabled

1 php_ini_system apc.shm_segments

30 php_ini_system apc.shm_size

0 php_ini_all apc.optimization

1000 php_ini_system apc.num_files_hint

0 php_ini_system apc.ttl

3600 php_ini_system apc.gc_ttl

在php_ini_system apc.cache_by_default

apc.filters php_ini_system

apc.mmap_file_mask php_ini_system

0 php_ini_system apc.slam_defense

2 php_ini_system apc.file_update_protection

apc.enable_cli 0 php_ini_system > APC 3.0.6

配置就绪后,程序立即启动。

xml代码如下所示:

复制代码代码如下所示:





视频标题:

视频描述:

视频标记(逗号分区)













< div







最重要的是apc_upload_progress隐藏域。通过它的脚本,您可以访问上传文件的状态,并添加一个显示上传状态的div。

下面是处理ajax的脚本,我使用jQuery框架,通过JSON传递消息。

Javascript代码如下所示:

复制代码代码如下:功能得到任务的进度(单){

var url =epadmin /过程;

getJSON(美元。

URL,

{ progress_key:单},

函数(JSON){

$(# progressinner)。Width(JSON。每+%);

$(# upstatus)。Html(文件大小:+ JSON。总+ 'kb+已上载:+ JSON。电流+ 'kb);

如果(json.per<100){

setTimeout(){()函数(

得到任务的进度(单);

},10);

其他{ }

$(# upstatus)。Html(完整的视频上传,处理数据,请稍后…);

}

}

)

}

功能startprogress(单){

$(# progressouter)。Css({显示:块});

setTimeout(){()函数(

得到任务的进度(单);

},100);

}

下面是读取和上传PHP代码的状态,至于上传文件的处理可以按照自己的习惯编写,代码如下:

将代码复制如下:上传文件操作函数,可以根据自己的需要编写。

upflvaction()函数

{

如果($ _server { } = = 'post 'request_method ' '){

为主题装饰(美元-> F ->滤波器(美元-> _request -> GETPOST(主体)));

$content =装饰(美元-> F ->滤波器(美元-> _request -> GETPOST('content')));

zend_loader::loadClass('custom_flvop);

FLV =新custom_flvop美元;

$ FLV -> uploadflv('upfile美元美元,主体、内容);

}

}

这是读/上传功能的状态。

upprocessaction()函数

{

如果(isset($ _get { 'progress_key ' })){

$状态= apc_fetch('upload_'。_get美元{ 'progress_key});

$ =数组(

每= > $状态{ } /当前的美元地位{综合}×100,

总= >圆(合状态{综合} / 1024),

当前= >圆(合状态{当前} / 1024),

);

require_once(禅 / JSON。PHP );

回声zend_json::编码($ JSON);

}

}

关于APC配置的一些细节:

apc.enabled布尔

apc.enabled可设置0禁用APC,这主要是有用的。当APC被编译成PHP静态时,没有其他方法可以禁用它。当编译DSO,可以在php.ini中的扩展行注释。

apc.shm_segments整数

分配给编译缓冲区的共享内存块的数量被分配。如果APC从共享内存,和你有apc.shm_size为系统允许的最大值,你可以尝试增加这个参数的值。

apc.shm_size整数

每个共享内存块的大小是基于MB。默认情况下,对于一些系统的共享内存块的大小的限制,包括大多数BSD变种系统,非常低。

apc.optimization整数

优化等级。设置为0禁用优化,使用越高的优化值越高。期待中等速度的改进。这是一个实验性的改进。

apc.num_files_hint整数

提示在Web服务器上包含和请求的不同源文件的数量。如果您不确定,请将其设置为0或省略;此设置主要用于具有数千个源文件的站点。

apc.ttl整数

当缓冲区中的另一个位置需要缓存条目时,我们需要考虑缓存区允许空闲缓存的秒数。将此参数设置为0意味着您的缓存可能充满了新项,并且不能缓存新条目。

apc.gc_ttl整数

那缓存项生活垃圾收集列表的秒数。此值提供了一个事件,执行缓存源文件时服务器进程是死的错误保护。如果源文件被修改,内存分配的缓存条目旧版本将不能恢复到设置的参数达到TTL值。设置为0是这个功能的禁止。

apc.cache_by_default布尔

默认的,但它可以被设置为关闭,使用与apc.filters开始用加号连接,和文件仅缓存只有当滤波器的匹配。

apc.filters字符串

一个逗号分割的POSIX扩展正则表达式的列表。如果任何模式匹配的源文件的名称,文件将不会被缓存。注意,用来匹配文件名的文件传递给包括 /要求的名字,而不是绝对路径。如果正则表达式的第一个字符是+,那么这个表达意味着任何匹配表达式的文件将被缓存。如果第一个字符是-那么任何匹配都不会被缓存-它是默认值,所以可以省略它。

apc.mmap_file_mask字符串

apc.slam_defense整数

在一个非常繁忙的服务器,无论你启动服务或修改文件,你会多进程来缓存相同的文件在同一时间。这个选项设置过程中跳过尝试缓存文件没有被缓存的百分比。或者你可以想象一下这是一个概率,分离过程跳过缓存。例如,建立apc.slam_defense 75意味着过程都有75%的概率不缓存不缓存文件。因此,更高的设置,更多的缓存可以减少碰撞的概率设为0禁用此功能。

apc.file_update_protection整数

当你修改一个文件在运行的服务器,你应该执行原子操作,写一个临时文件,然后重命名(MV)文件到其最终位置时完成。很多文本编辑器,CP,焦油,和其他一些类似的节目不都是这样做的。这意味着一个机会来访问(缓存)的文件,当文件仍然是写的apc.file_update_protection设置允许缓存标志新文件的延迟。默认值是2,这意味着该文件将不被缓存,如果该文件的时间距离的访问时间被发现是小于2秒。不幸的人访问该文件的用户将看到一半的怪现状,但至少这是没有的情况下,如果你是当然,你经常使用原子操作来更新你的文件,你可以通过设置这个参数到0关闭这个保护。如果你的系统充满IO操作并导致更新程序需要超过2秒,你可能需要增加这个值。

apc.enable-cli整数

主要用于测试和调试,为CLI版本PHP启动APC函数。一般来说,您不会期望为每个CLI请求创建、移植和放弃APC缓存,但是对于各种测试用例,打开APC非常容易。对于CLI版本。

希望本文能对大家的PHP程序设计有所帮助。