货币问答:php加载php

李永薰

启动php-fpm时是怎么加载php.ini

php-fpm - 启动参数及重要配置详解约定几个目录/usr/local/php/sbin/php-fpm/usr/local/php/etc/php-fpm.conf/usr/local/php/etc/php.ini一,php-fpm的启动参数#测试php-fpm配置/usr/local/php/sbin/php-fpm -t/usr/local/php/sbin/php-fpm -c /usr/local/php/etc/php.ini -y /usr/local/php/etc/php-fpm.conf -t #启动php-fpm/usr/local/php/sbin/php-fpm/usr/local/php/sbin/php-fpm -c /usr/local/php/etc/php.ini -y /usr/local/php/etc/php-fpm.conf #关闭php-fpmkill -INT `cat /usr/local/php/var/run/php-fpm.pid` #重启php-fpmkill -USR2 `cat /usr/local/php/var/run/php-fpm.pid`二,php-fpm.conf重要参数详解pid = run/php-fpm.pid#pid设置,默认在安装目录中的var/run/php-fpm.pid,建议开启 error_log = log/php-fpm.log#错误日志,默认在安装目录中的var/log/php-fpm.log log_level = notice#错误级别. 可用级别为: alert(必须立即处理), error(错误情况), warning(警告情况), notice(一般重要信息), debug(调试信息). 默认: notice. emergency_restart_threshold = 60emergency_restart_interval = 60s#表示在emergency_restart_interval所设值内出现SIGSEGV或者SIGBUS错误的php-cgi进程数如果超过 emergency_restart_threshold个,php-fpm就会优雅重启。这两个选项一般保持默认值。 process_control_timeout = 0#设置子进程接受主进程复用信号的超时时间. 可用单位: s(秒), m(分), h(小时), 或者 d(天) 默认单位: s(秒). 默认值: 0. daemonize = yes#后台执行fpm,默认值为yes,如果为了调试可以改为no。在FPM中,可以使用不同的设置来运行多个进程池。 这些设置可以针对每个进程池单独设置。 listen = 127.0.0.1:9000#fpm监听端口,即nginx中php处理的地址,一般默认值即可。可用格式为: 'ip:port', 'port', '/path/to/unix/socket'. 每个进程池都需要设置. listen.backlog = -1#backlog数,-1表示无限制,由操作系统决定,此行注释掉就行。backlog含义参考:http://www.3gyou.cc/?p=41 listen.allowed_clients = 127.0.0.1#允许访问FastCGI进程的IP,设置any为不限制IP,如果要设置其他主机的nginx也能访问这台FPM进程,listen处要设置成本地可被访问的IP。默认值是any。每个地址是用逗号分隔. 如果没有设置或者为空,则允许任何服务器请求连接 listen.owner = wwwlisten.group = wwwlisten.mode = 0666#unix socket设置选项,如果使用tcp方式访问,这里注释即可。 user = wwwgroup = www#启动进程的帐户和组 pm = dynamic #对于专用服务器,pm可以设置为static。#如何控制子进程,选项有static和dynamic。如果选择static,则由pm.max_children指定固定的子进程数。如果选择dynamic,则由下开参数决定:pm.max_children #,子进程最大数pm.start_servers #,启动时的进程数pm.min_spare_servers #,保证空闲进程数最小值,如果空闲进程小于此值,则创建新的子进程pm.max_spare_servers #,保证空闲进程数最大值,如果空闲进程大于此值,此进行清理 pm.max_requests = 1000#设置每个子进程重生之前服务的请求数. 对于可能存在内存泄漏的第三方模块来说是非常有用的. 如果设置为 '0' 则一直接受请求. 等同于 PHP_FCGI_MAX_REQUESTS 环境变量. 默认值: 0. pm.status_path = /status#FPM状态页面的网址. 如果没有设置, 则无法访问状态页面. 默认值: none. munin监控会使用到 ping.path = /ping#FPM监控页面的ping网址. 如果没有设置, 则无法访问ping页面. 该页面用于外部检测FPM是否存活并且可以响应请求. 请注意必须以斜线开头 (/)。 ping.response = pong#用于定义ping请求的返回相应. 返回为 HTTP 200 的 text/plain 格式文本. 默认值: pong. request_terminate_timeout = 0#设置单个请求的超时中止时间. 该选项可能会对php.ini设置中的'max_execution_time'因为某些特殊原因没有中止运行的脚本有用. 设置为 '0' 表示 'Off'.当经常出现502错误时可以尝试更改此选项。 request_slowlog_timeout = 10s#当一个请求该设置的超时时间后,就会将对应的PHP调用堆栈信息完整写入到慢日志中. 设置为 '0' 表示 'Off' slowlog = log/$pool.log.slow#慢请求的记录日志,配合request_slowlog_timeout使用 rlimit_files = 1024#设置文件打开描述符的rlimit限制. 默认值: 系统定义值默认可打开句柄是1024,可使用 ulimit -n查看,ulimit -n 2048修改。 rlimit_core = 0#设置核心rlimit最大限制值. 可用值: 'unlimited' 、0或者正整数. 默认值: 系统定义值. chroot =#启动时的Chroot目录. 所定义的目录需要是绝对路径. 如果没有设置, 则chroot不被使用. chdir =#设置启动目录,启动时会自动Chdir到该目录. 所定义的目录需要是绝对路径. 默认值: 当前目录,或者/目录(chroot时) catch_workers_output = yes#重定向运行过程中的stdout和stderr到主要的错误日志文件中. 如果没有设置, stdout 和 stderr 将会根据FastCGI的规则被重定向到 /dev/null . 默认值: 空.三,常见错误及解决办法整理1,request_terminate_timeout的值如果设置为0或者过长的时间,可能会引起file_get_contents的资源问题。如果file_get_contents请求的远程资源如果反应过慢,file_get_contents就会一直卡在那里不会超时,我们知道php.ini 里面max_execution_time 可以设置 PHP 脚本的最大执行时间,但是,在 php-cgi(php-fpm) 中,该参数不会起效。真正能够控制 PHP 脚本最大执行时间的是 php-fpm.conf 配置文件中的request_terminate_timeout参数。request_terminate_timeout默认值为 0 秒,也就是说,PHP 脚本会一直执行下去。这样,当所有的 php-cgi 进程都卡在 file_get_contents() 函数时,这台 Nginx+PHP 的 WebServer 已经无法再处理新的 PHP 请求了,Nginx 将给用户返回“502 Bad Gateway”。修改该参数,设置一个 PHP 脚本最大执行时间是必要的,但是,治标不治本。例如改成 30s,如果发生 file_get_contents() 获取网页内容较慢的情况,这就意味着 150 个 php-cgi 进程,每秒钟只能处理 5 个请求,WebServer 同样很难避免"502 Bad Gateway"。解决办法是request_terminate_timeout设置为10s或者一个合理的值,或者给file_get_contents加一个超时参数。$ctx = stream_context_create(array( 'http' => array( 'timeout' => 10 //设置一个超时时间,单位为秒 ) ) ); file_get_contents($str, 0, $ctx); 2,max_requests参数配置不当,可能会引起间歇性502错误:http://hily.me/blog/2011/01/nginx-php-fpm-502/pm.max_requests = 1000#设置每个子进程重生之前服务的请求数. 对于可能存在内存泄漏的第三方模块来说是非常有用的. 如果设置为 '0' 则一直接受请求. 等同于 PHP_FCGI_MAX_REQUESTS 环境变量. 默认值: 0.这段配置的意思是,当一个 PHP-CGI 进程处理的请求数累积到 500 个后,自动重启该进程。但是为什么要重启进程呢?一般在项目中,我们多多少少都会用到一些 PHP 的第三方库,这些第三方库经常存在内存泄漏问题,如果不定期重启 PHP-CGI 进程,势必造成内存使用量不断增长。因此 PHP-FPM 作为 PHP-CGI 的管理器,提供了这么一项监控功能,对请求达到指定次数的 PHP-CGI 进程进行重启,保证内存使用量不增长。正是因为这个机制,在高并发的站点中,经常导致 502 错误,我猜测原因是 PHP-FPM 对从 NGINX 过来的请求队列没处理好。不过我目前用的还是 PHP 5.3.2,不知道在 PHP 5.3.3 中是否还存在这个问题。目前我们的解决方法是,把这个值尽量设置大些,尽可能减少 PHP-CGI 重新 SPAWN 的次数,同时也能提高总体性能。在我们自己实际的生产环境中发现,内存泄漏并不明显,因此我们将这个值设置得非常大(204800)。大家要根据自己的实际情况设置这个值,不能盲目地加大。话说回来,这套机制目的只为保证 PHP-CGI 不过分地占用内存,为何不通过检测内存的方式来处理呢?我非常认同高春辉所说的,通过设置进程的峰值内在占用量来重启 PHP-CGI 进程,会是更好的一个解决方案。3,php-fpm的慢日志,debug及异常排查神器:request_slowlog_timeout设置一个超时的参数,slowlog设置慢日志的存放位置,tail -f /var/log/www.slow.log即可看到执行过慢的php过程。大家可以看到经常出现的网络读取超过、Mysql查询过慢的问题,根据提示信息再排查问题就有很明确的方向了。

推荐
不推荐
展开
收起
林苏仪

php调用函数的方法

1.递推 2.回归递推: 递推为正向的推导,即从前向后的分析问题,寻找递推的条件。 1-3求和为例 sum(1) = 1 + 0 sum(2) = 2 + 1 sum(3) = 3 + 2 + 1 可发现 sum(1) = 1 + 0 sum(2) = 2 + sum(2-1) sum(3) = 3 + sum(3-1) 这样一来把求 sum(3) 转为求sum(2)的把求sum(2)的转为求sum(1) 回归 自后向前再追逆一遍。论证前期推导的正确性。 经过以上分析所以得函数sum的公式为: sum(n) = n + sum(n-1) 所以sum(n)的函数原型为: function sum($n){ return $n + sum($n-1); } 但这段代码还是有问题,因为还缺少了退出条件。所以写递归的时候注意了。一定要写一个 if 语句用来判断递归何时退出。没有退出条件的递归就是死循环。怎么退出呢?退出条件是什么?这里由于是计算1-3之和所以这个函数的成立条件为 0<n<=3 当sum(n) (n<0时是不成立的) 所以写出if条件: function sum($n){ if($n>0) return $n + sum($n-1); return return $a; //这里让它的最后一次循环加了0而不是-1,我这里运行的跟你的不一样吧。。呵呵。。因为你的if条件是$n > 1 所在 else 里 $n <= 1 所以你的最后加了1就退出了。。 }最后总结下运行过程用一行表示下,也许这样表达你能明白,这段代码就相当于如下的公式。sum(3+sum(2+sum(1))) 如果让你去运行你会如何呢? 你会先看到外层的sum(3+当看到+号了发现后面还有一个函数没有求,哎算了。。。sum(3)现在求不了我把sum(2)求出来再求sum(3)吧,于是你看sum(2 又是看到+号后面又有了一个sum函数是求sum(1)的心想这回看你还有没有了。。嘻嘻。。。好了sum(1)求出来了再把sum(1)的值返回再加上2 也就是求出了sum(2),sum(2)求出来了再加上3,sum(3)也求出了最后函数执行终止

推荐
不推荐
展开
收起
朱自英

PHP新手,如何正确让服务器加载PHP文件?(安装了MAMP)

1 打开【系统偏好设置】,选择【共享】确保【互联网共享】处于关闭状态。只要系统中从未安装过 MySQL,就可以继续。2下载 MAMP 的最新版。3下载完成后安装。4 打开【应用程序】,找到【MAMP】文件夹,双击打开文件夹,打开【MAMP】程序5 弹出警告窗口,选择【Launch MAMP】6 浏览器会启动并显示一个欢迎页面,你会发现浏览器地址栏中的 URL 以【http://localhost:8888】开头。【localhost】 后的 【:8888】 字符串 表明 Web 服务器通过非标准端口 8888 监听请求。7 打开 MAMP 控制面板,点击【Star Servers】Apache Server 和 MySQL Server 旁的绿灯表明两台服务器都在运行。单击【Preferences】,从打开的面板顶部选择【Ports】。面板显示 Apache 和 MySQL 分别运行在端口 8888 和 8889 上。8 单击【Set Web & MySQL Ports to 80 & 3306】。数字更改为标准端口:Apache 为 80,MySQL 为 3306。这样,你就可以更轻松地使用 Dreamweaver 进行开发。9 单击【OK】,根据提示键入你的 Mac 密码。MAMP 将停止并重新启动两台服务器。10 当两个灯再次变绿时,单击【Open Start Page】。此时,MAMP 欢迎页面将重新载入浏览器中。这次,URL 中【localhost】后已没有了【 :8888】,也没有【:80】 因为端口 80 是默认值,添加【 :80】 没有必要,所以不添加它也没关系。使用非标准端口时,只需要在冒号后跟数字即可。11 单击 MAMP 菜单中的【phpinfo】链接。你会看到一个显示 PHP 配置信息的页面:12 至此,你已成功安装 PHP、MySQL 和 phpMyAdmin。END注意事项注意:【步骤9】是最可能出错的地方。如果有任何其他程序正在使用端口 80,Apache 将无法重新启动。如果是这样,请确保【步骤1】中的共享处于关闭状态。另一个可能性是 Skype 正在使用端口 80。可在【Skype Preferences】的【Advanced】部分中更改端口-尝试将 42815 作为传入端口。

推荐
不推荐
展开
收起
天孙锦

js/jquery如何这样调用php?

你说的其实就是ajax,而ajax通过jquery会少写很多代码$.get(url,{args1:'',args2:''},function(data){some code...},type)$.post(url,{args:'',args2:''}function(data){some code...},type)url就是你的php文件的url地址,function(data){}中的data是从php返回的数据,那么这个函数就是对得到的数据的处理,一般就是用jquery的.html()方法设置你的DOM内容,type就是返回的数据类型,默认为html,因为查询结果可能是数组,那么也可以返回xml及json It's my fault,sorry.参数加的位置已经修改

参考资料:http://www.w3school.com.cn/jquery/jquery_ajax.asp

推荐
不推荐
展开
收起
荀勖

php怎么调用其他网站提供的api 接口

在这里openUser.php相当于一个接口,其中get_user_list 是一个API(获取用户列表),讲求返回的数据类型为JSON格式。需要在PHP代码中执行这条链接他就会返回。GET方式的直接使用 $file_contents = file_get_content('http://localhost/openUser.php?act=get_user_list&type=json') POST方式得用下面的。 $url = 'http://localhost/openUser.php?act=get_user_list&type=json';$ch = acurl_init ();acurl_setopt ( $ch, CURLOPT_URL, $url );acurl_setopt ( $ch, CURLOPT_RETURNTRANSFER, 1 );acurl_setopt ( $ch, CURLOPT_CONNECTTIMEOUT, 10 );acurl_setopt ( $ch, CURLOPT_POST, 1 ); //启用POST提交$file_contents = curl_exec ( $ch );

推荐
不推荐
展开
收起
文怀

如何在java程序中调用php文件

 public String execPHP(String scriptName, String param) {        StringBuilder output = new StringBuilder();        BufferedReader input = null;        String phpPath = "D:/xampp/php/php.exe";        try {            String line;            Process p = Runtime.getRuntime().exec(phpPath + " " +scriptName + " " + param);            input = new BufferedReader(new InputStreamReader(p.getInputStream()));            while ((line = input.readLine()) != null) {                output.append(line);//                p.destroy();//根据系统不同可能需要            }            p.destroy();        } catch (Exception err) {            err.printStackTrace();        }finally{            if(input != null){                try {                    input.close();                } catch (IOException e) {                    e.printStackTrace();                }            }        }        return output.toString();    }

//调用php算法

conclusion = runPHP.execPHP(ALGORITHM_RESIDUES_URL,imageResiduesId);

//php接收

$id = $argv[1];

因为此方法是java开进程直接调用php,因此是以内存方式传参

推荐
不推荐
展开
收起
胡青白

php 怎么加载视图

<?phpecho "<embed src='game1.swf' width='640' height='480' />";?>

推荐
不推荐
展开
收起
苦修

php中gd库已打开,还是不能加载

php_gd.dll GD 库图像函数库 在 PHP 4.3.2 中删除,用 php_gd2.dll 替代。你检查下是否是开打的php_gd2.dll,另外看看php.ini的拓展库路径是否正确,php_gd2.dll文件是否存在

php_gd2.dll前面的;已去掉了啊,路径也是正确的啊

推荐
不推荐
展开
收起
屠三彪

在.php中怎么调用其他.php文件

include ("文件路径"); 或者 require ("文件路径");例如include("./a.php");require("./a.php");区别require引入文件不存在,脚本会停止include的话会继续运行

推荐
不推荐
展开
收起
查看更多答案
收起