程序地带

PHP 批处理 处理大数据 长时间处理


作者:林子木


原文链接   http://blog.csdn.net/wolinxuebin/article/details/7722424


可能本文有错误,会及时修改,请参看上面链接,查看最新更新。    


      最近在做一个东西,用PHP写的,由于要将数据库中的图片名字读出来,然后访问对应图片,读取图片的大小以及分辨率,重新存入数据库。数据量现在才是处理5000条的,如果不加任何设置的话,php默认最大执行时间是30秒。


     所以30秒内,我只能处理700条,刚开始只能手动,七百、七百的执行了。后来感觉这样不行,以后的数据量会过10W,这样会累死我的。


     网上搜索了下,有三种处理方式。


    第一种


    很直接,既然你默认30秒,那么我就把你的默认时间设置长点,或者直接没有限制。


    在php中添加,php ini_set('max_execution_time', '100');函数就可以了,100代表100秒,如果你设置了0,那么就代表没有限制。(ps:我用的是zend的结合,设置为0的时候,不是没有限制,而是大概是120的样子,我的解决方法是,把这个值设置的so big)


    在网址http://hi.baidu.com/shouji163/item/a604ddf3534aec2a84d2784a中,有更多关于此种方法的介绍。


   


    第二种


    本人很喜欢,是利用php和批处理的结合。


   


@REM<?php@REM =='@SET PHPCLI="D:Program Filesendend Studio - 8.0.1pluginsorg.zend.php.debug.debugger.win32.x86_5.3.18.v20110322 esourcesphp53php.exe"@REM PHPCLI 设置你的php.exe的路径@%PHPCLI% %0@goto :EOF@REM';?><?phpinclude'C:\Program Files\Zend\Apache2\htdocs\pic_gather\pic_operate.php';echo " finish";ob_flush();exec("pause");?>

来自论坛:http://bbs.chinaunix.net/thread-527114-1-1.html


 


 


是批处理命令,所以我还花了1个小时特地看了下批处理命令。大致翻译下上面的程序。


@:不显示后面的指令,如果去掉,指令会在命令窗口中打印出来


REM 是批处理的注释,后面的是注释,不执行。跟@不同,@只是命令不打印出来,并不表示注释。


 


程序开始执行,首先是bat运行


 


@SET PHPCLI="D:Program Filesendend Studio - 8.0.1pluginsorg.zend.php.debug.debugger.win32.x86_5.3.18.v20110322 esourcesphp53php.exe"

设置了PHPCLI的值 


 


 


@%PHPCLI% %0

 


    %PHPCLI% 代表的就是你上面设置的路径,这里表示执行php.exe,然后%0代表此.bat文件所在的路径, 连起来的意思就是用php.exe运行.bat文件。


   会出现上面现象呢,php可不认为REM是注释呀,只认为是普通的字符。


   就会首先打印@REM,然后


 


<?php@REM =='@SET PHPCLI="D:Program Filesendend Studio - 8.0.1pluginsorg.zend.php.debug.debugger.win32.x86_5.3.18.v20110322 esourcesphp53php.exe"@REM PHPCLI 设置你的php.exe的路径@%PHPCLI% %0@goto :EOF@REM';?>

这里,php.exe可认识了,表示上面意思?在php中@可认识否?这个表示抑制错误,那么就是字符串‘’中的内容与REM进行==,那么有被@抑制错误。安然度过。


 


进入下一段


 


<?phpinclude'C:\Program Files\Zend\Apache2\htdocs\pic_gather\pic_operate.php';echo " finish";ob_flush();exec("pause");?>

这里就是你要执行的程序了。我不想写在这里面,那么就include一下,这样容易让.bat成为一个模板。


 


到此你的php.exe算是走完了,可是还没完呢,刚刚批处理命令才到


 


@%PHPCLI% %0

之后为了不让批处理命令不认识php的语言,用了


 


 


@goto :EOF

来结束程序。 


 


有人问为什么不直接这样:


 


@SET PHPCLI="D:Program Filesendend Studio - 8.0.1pluginsorg.zend.php.debug.debugger.win32.x86_5.3.18.v20110322 esourcesphp53php.exe"@REM PHPCLI@%PHPCLI% %0@goto :EOF<?phpinclude'C:\Program Files\Zend\Apache2\htdocs\pic_gather\pic_operate.php';echo " finish";ob_flush();exec("pause");?>

不用搞这么复杂,我也试了下,


 


发现cmd命令行会出现:


@SET PHPCLI="D:Program Filesendend Studio - 8.0.1pluginsorg.zend.php.debu g.debugger.win32.x86_5.3.18.v20110322 esourcesphp53php.exe" @REM PHPCLI @%PHPCLI% %0 @goto :EOF


这代码的原作者,就是想避免出现这样的情况,然打印出太多的垃圾信息。


所以说这才是原作者的精辟之处呀。


    第三种


    这个如果你,仅仅只要更新里面的字符串信息,比如你设置了class类,如果class='自然风光',那么就把image前面加上pic_gather/nature/image。那么没有必要用上面的这么复杂的东西,直接用sql语言就行了,concat()函数就有这样的功能。


例如:UPDATE `game_3533_com_lingsheng` SET `music`=concat('ring_gather/funny/',`music`) WHERE `class`='搞笑铃声'


版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/an17822307871/article/details/112760981

随机推荐

SpringCloud微服务实战——服务降级处理过程分析

最近自己看到了SpringCloud微服务实战的Hystrix这一块,就简单的将这一块中的服务降级跟大家说一说。Hystrix的概念以及其作用断路器模式源于MartinFowler的Ci...

Σεαγαπώ℡ 阅读(779)

WPF——数据校验

1展示样例2数据校验的目的用户在UI上输入的数据不一定符合Source的数据要求,故而要对其数据进行验证,并在不符合要求的时候,在UI上给出一定的反馈提示。本...

「千秋雪」 阅读(856)

安装Tensorflow报错—UnavailableInvalidChannel

文章目录前言一、运行报错二、原因及解决总结前言由于在AnacondaPrompt中导入tensorflow包持续报错找不到模块,多番解决无果后卸载重装Anacnoda,在创...

渣渣黑呀 阅读(564)

MybatisPlus中的性能分析插件

分析插件:1、在配置类中注册性能分析插件@Bean@Profile({"dev","test"})//设置devtest环境开启publi...

pipizhen_ 阅读(677)

Gson的基本使用

Gson是目前功能最强的JSON解析器,并且不需要依赖额外jar包,能够直接运行在java平台。与另一款优秀的JSON解析器FastJson相比Gson的优势是可以准确顺利...

JamesLau-pro 阅读(457)

interface笔记7.接口的常量定义和使用

接口中定义“成员变量”(其实本质是常量),但是必须使用publicstaticfinal三个关键字进行修饰,从效果上看,就是接口的...

手握三千少女心 阅读(492)