PHP-Fcgi下PHP的履行时候设置办法

    添加时间:2013-8-5 点击量:

    昨天,一个法度须要导出500条数据,成果发明到150条是,Nginx报出504 Gateway Timeout错误,本来PHP-Fcgi下的设置履行时候与isapi的不合


    一般景象下设置PHP脚本履行超时的时候


    一、在php.ini里面设置
    max_execution_time = 1800;


    二、经由过程PHP的ini_set 函数设置
    ini_set(max_execution_time, 1800);


    三、经由过程set_time_limit 函数设置
    set_time_limit(1800);


    PHP-Fcgi下PHP的履行时候设置办法


    昨天,一个法度须要导出500条数据,成果发明到150条是,Nginx报出504 Gateway Timeout错误


    经调查,发明大约30秒时超时,php.ini中履行时候设备已经是300秒:


    max_execution_time = 300


    再查nginx的相干设备,无果。


    写了一个php的测试页再测



    echo aaa;
    
    set_time_limit(0);
    sleep(40);
    echo aa;//by www.jbxue.com


    依然超时,可以断定set_time_limit这个函数没生效。


    再查php-fcgi的设备php-fpm.conf,下边这个设置疑似有题目


    <VALUE name=request_terminate_timeout>30s</VALUE>


    查官方文档:http://php-fpm.org/wiki/Configuration_File


    request_terminate_timeout - The timeout (in seconds) for serving a single request after which the worker process will be terminated. Should be used when max_execution_time ini option does not stop script execution for some reason. Default: 5s. Note: 0s means off


    大意是php中set_time_limit设置的时候内若是php还没履行完,则走此处的设备,也就是request_terminate_timeout=30秒。
    先把这个参数改的和php中set_time_limit值一样,都是300秒,还不可,不睬解为什么,若是高手知道请赐教。


    终极把request_terminate_timeout封闭,法度可以正常履行了,题目解决



    <VALUE name=request_terminate_timeout>0s</VALUE>


    补充:若是前端的nginx办事器应用了upstream负载均衡,那个负载均衡设备中以下几个参数也须要响应批改



    proxy_connect_timeout 300s;
    
    proxy_send_timeout 300s;
    proxy_read_timeout 300s;

    真正的心灵世界会告诉你根本看不见的东西,这东西需要你付出思想和灵魂的劳动去获取,然后它会照亮你的生命,永远照亮你的生命。——王安忆《小说家的十三堂课》
    分享到: