php出现502是什么问题
发布时间:2025-05-21 13:50:18 发布人:远客网络
一、php出现502是什么问题
502 Bad Gateway是一种报错提示,这一错误并不意味着上游服务器已关闭(无响应网关/代理),而是上游服务器和网关/代理不同意的协议交换数据。
第一种原因:目前lnmp一键安装包比较多的问题就是502 Bad Gateway,大部分情况下原因是在安装php前,脚本中某些lib包可能没有安装上,造成php没有编译安装成功。解决办法:可以尝试根据lnmp一键安装包中的脚本手动安装一下,看看是什么错误导致的。
第二种原因:在php.ini里,eaccelerator配置项一定要放在Zend Optimizer配置之前,否则也可能引起502 Bad Gateway
第三种原因:在安装好使用过程中出现502问题,一般是因为默认php-cgi进程是5个,可能因为phpcgi进程不够用而造成502,需要修改/usr/local/php/etc/php-fpm.conf将其中的max_children值适当增加。
第四种原因:php执行超时,修改/usr/local/php/etc/php.ini将max_execution_time改为300。
第五种原因:磁盘空间不足,如mysql日志占用大量空间。
第六种原因:查看php-cgi进程是否在运行。
Nginx 502 Bad Gateway的含义是请求的PHP-CGI已经执行,但是由于某种原因(一般是读取资源的问题)没有执行完毕而导致PHP-CGI进程终止,一般来说Nginx 502 Bad Gateway和php-fpm.conf的设置有关。
php-fpm.conf有两个至关重要的参数,一个是max_children,另一个是request_terminate_timeout,但是这个值不是通用的,而是需要自己计算的。
在安装好使用过程中出现502问题,一般是因为默认php-cgi进程是5个,可能因为phpcgi进程不够用而造成502,需要修改/usr/local/php/etc/php-fpm.conf将其中的max_children值适当增加。
计算的方式如下:如果服务器性能足够好,且宽带资源足够充足,PHP脚本没有系循环或BUG的话可以直接将request_terminate_timeout设置成0s。0s的含义是让PHP-CGI一直执行下去而没有时间限制。如果做不到这一点,也就是说PHP-CGI可能出现某个BUG,或者宽带不够充足或者其他的原因导致PHP-CGI假死那么就建议给request_terminate_timeout赋一个值,这个值可以根据服务器的性能进行设定。一般来说性能越好可以设置越高,20分钟-30分钟都可以。
而max_children这个值又是怎么计算出来的呢?这个值原则上是越大越好,php-cgi的进程多了就会处理的很快,排队的请求就会很少。设置max_children也需要根据服务器的性能进行设定,一般来说一台服务器正常情况下每一个php-cgi所耗费的内存在20M左右。
按照官方的答案,排查了相关的可能,并结合了网友的答案,得出了下面的解决办法:
1、查看php fastcgi的进程数(max_children值)代码:netstat-anpo| grep“php-cgi”| wc-l
2、查看当前进程,代码:top观察fastcgi进程数,假如使用的进程数等于或高于5个,说明需要增加(根据机器实际状况而定)
3、调整/usr/local/php/etc/php-fpm.conf的相关设置
<value name=”max_children”>10</value>
<value name=”request_terminate_timeout”>60s</value>
max_children最多10个进程,按照每个进程20MB内存,最多200MB。
request_terminate_timeout执行的时间为60秒,也就是1分钟。
二、php怎么增加log日志来
1、使用指定的文件记录错误报告日志
使用指定的文件记录错误报告日志使用指定的文件记录错误报告日志使用指定的文件记录错误报告日志如果使用自己指定的文件记录错误日志,一定要确保将这个文件存放在文档根目录之外,以减少遭到攻击的可能。并且该文件一定要让PHP脚本的执行用户(Web服务器进程所有者)具有写权限。假设在Linux操作系统中,将/usr/local/目录下的error.log文件作为错误日志文件,并设置Web服务器进程用户具有写的权限。然后在PHP的配置文件中,将error_log指令的值设置为这个错误日志文件的绝对路径。
需要将php.ini中的配置指令做如下修改:
1. error_reporting= E_ALL;将会向PHP报告发生的每个错误
2. display_errors= Off;不显示满足上条指令所定义规则的所有错误报告
3. log_errors= On;决定日志语句记录的位置
4. log_errors_max_len= 1024;设置每个日志项的最大长度
5. error_log= E:/php_log/php_error.log;指定产生的错误报告写入的日志文件位置
PHP的配置文件按上面的方式设置完成以后,并重新启动Web服务器。这样,在执行PHP的任何脚本文件时,所产生的所有错误报告都不会在浏览器中显示,而会记录在自己指定的错误日志/usr/local/error.log中。此外,不仅可以记录满足error_reporting所定义规则的所有错误,而且还可以使用PHP中的error_log()函数,送出一个用户自定义的错误信息。
三、php的文件到底怎么用啊
PHP,一个嵌套的缩写名称,是英文“超级文本预处理语言”(PHP:Hypertext Preprocessor)的缩写。PHP是一种 HTML内嵌式的语言,PHP与微软的ASP颇有几分相似,都是一种在服务器端执行的“嵌入HTML文档的脚本语言”,语言的风格有类似于C语言,现在被很多的网站编程人员广泛的运用。PHP独特的语法混合了 C、Java、Perl以及 PHP自创新的语法。它可以比 CGI或者 Perl更快速的执行动态网页。用PHP做出的动态页面与其他的编程语言相比,PHP是将程序嵌入到HTML文档中去执行,执行效率比完全生成HTML标记的CGI要高许多;与同样是嵌入HTML文档的脚本语言JavaScript相比,PHP在服务器端执行,成分利用了服务器的性能;PHP执行引擎还会将用户经常访问的PHP程序驻留在内存中,其他用户在一次访问这个程序时就不需要诚信编译程序了,只要直接执行内存中的代码就可以了,这也是PHP高效率的体现之一。PHP具有非常强大的功能,所有的CGI或者JavaScript的功能PHP都能实现,而且支持几乎所有流行的数据库以及操作系统。
PHP最初是1994年Rasmus Lerdorf创建的,刚刚开始只是一个简单的用Perl语言编写的程序,用来统计他自己网站的访问者。后来又用C语言重新编写,包括可以访问数据库。在1995年以Personal Home Page Tools(PHP Tools)开始对外发表第一个版本,Lerdorf写了一些介绍此程序的文档,并且发布了PHP1.0。在这早期的版本中,提供了访客留言本、访客计数器等简单的功能。以后越来越多的网站使用了PHP,别且强烈要且增加一些特性,比如循环语句和数组变量等等,在新的成员加入开发行列之后,在1995年中,PHP2.0发布了。第二版定名为PHP/FI(Form Interpreter)。PHP/FI加入了对mSQL的支持,从此建立了PHP在动态网页开发上的地位。到了1996年底,有15000个网站使用 PHP/FI;时间到了1997年中,使用PHP/FI的网站数字超过五万个。而在1997年中,开始了第三版的开发计划,开发小组加入了 Zeev Suraski及 Andi Gutmans,而第三版就定名为PHP3。2000年,PHP4.0又问世了,其中增加了许多新的特性。
开放的源代码:所有的PHP源代码事实上都可以得到。
基于服务器端:由于PHP是运行在服务鞫说模�词乖俣嗟挠没В�俑丛拥某绦蛞膊换嵊跋煸诵械乃俣取?lt;BR>跨平台:PHP可以运行在UNIX、LINUX、WINDOWS下。
嵌入HTML:因为PHP可以嵌入HTML语言,所以学习起来并不困难。
简单的语言:PHP坚持脚本语言为主,与Java以C++不同。
效率高:PHP消耗相当少的系统资源。
PHP3跟Apache服务器紧密结合的特性;加上它不断的更新及加入新的功能;而且几乎支持所有主流与非主流数据库;再以它能高速的执行效率,使得PHP在1999年中的使用站点已经超过了150000万。加上它的源代码完全公开,在 Open Source意识抬头的今天,它更是这方面的中流砥柱。不断地有新的函数库加入,以及不停地更新的活力,使得PHP无论在UNIX、LINUX或是Windows的平台上都可以有更多新的功能。它提供丰富的函数,使得在程序设计方面有着更好的支持。
PHP4.0整个脚本程序的核心大幅更动,让程序的执行速度,满足更快的要求。在最佳化之后的效率,已较传统CGI或者ASP等程序有更好的表现。而且还有更强的新功能、更丰富的函数库。无论您接不接受,PHP都将在 Web CGI的领域上,掀起巅覆性的革命。对于一位专业的Web Master而言,它将也是必修课程之一。
PHP 4.0是更有效的,更可靠的动态Web页开发工具,在大多数情况运行比 PHP 3.0要快,其脚本描述更强大并且更复杂,最显著的特征是速率比的增加。PHP4.0这些优异的性能是PHP脚本引擎重新设计产生的结果:引擎由 AndiGutmans和 Zeev Suraski从底层全面重写。PHP4.0脚本引擎——Zend引擎,使用了一种更有效的“编译——执行”方式,而不是PHP 3.0采用的“执行——当解析时”模型。
PHP4在3.0版的基础上增加或增强了许多有用的特征,主要如下:
(1)别名:在PHP4中,可以利用引用为变量赋值,这给编程带来了很大的灵活性。
(2)扩充了API模块:PHP 4.0为扩展的 API模块的提供了扩展PHP接口模块,它比旧的 API版本显著地快。 PHP模块已有的及最常用的接口多数被转换到使用这个扩展的接口。
(3)自动资源释放:PHP4增加了引用计数功能,这种新技术的引入使PHP4具有了自动内存管理功能,减轻了开发人员的负担。
(4)布尔类型:PHP 4.0支持布尔类型。
(5)进程生成:在 UNIX环境下的 PHP 4.0提供了一个很智能和通用的生成进程,使用了一种名为基于automake/libtool的系统生成技术。
(6)COM/DCOM支持:PHP 4.0提供 COM/DCOM支持(仅用于Windows环境)可以无缝地存取和访问 COM对象。
(7)与PHP 3.0兼容性很好:PHP 4.0是与 PHP 3.0代码向后兼容性接近100%。由于 PHP 4的改进的体系结构,两者有一些细微的差别,但是大多数人将可能永远不可能遇上这种情况。
(8)配置:PHP4重新设计和增强了PHP。ini文件,这使得用PHP。ini来配置PHP显得极为容易,这个文件可以在运行时被Apache(unix系统)或由Windows注册(Windows环境)。
(9)加密支持:PHP4实现了完整的加密,这些加密功能是一个完整的mycrypt库,并且 PHP 4.0支持哈希函数。Blowfish,TripleDES,MD5,并且SHA1也是可使用的一些加密算法。
(10)类型检查:PHP 4.0支持同一操作符用于评类型检查:“===“( 3等号运算符),为在两个值和其类型之间作检查。例如,“ 3”===3将视为假(类型是不同的),而“ 3”==3(相等判断)将视为真。
(11)FTP支持:PHP 4.0支持 FTP。通常,你会为通过一个调制解调器连接下载一个大文件提供一个接口。然而,如果你确实有需要,可以使用PHP。
(12)PHP4新增函数或功能增强函数:PHP 4.0新增了许多函数,同时也将许多现有的函数功能进行了增强,以下是一些例子。 array_count_values() eval() foreach() nclude() ob_end_clean() ob_end_flush() ob_get_contents() ob_start() strip_tags() unset()
(13)“here”打印:PHP 4.0的“Here”打印是与Perl类似的,尽管完全不相同。“Here”是打印大容量文章的一个有用的方法,例如在 HTML文件中,不会漏掉任何一个字符,例如目录标记。
(14)HTTP Session fallback系统:为 HTTP Session管理的一个 fallback系统在 PHP 4.0被实现。缺省情况下,Session标识符由cookies存储。如果没有cookies支持或一项cookies任务失败,Session标识符自动被创建并在 URL的查询字符串中被携带。
(15)ISAPI支持:PHP 4.0能作为一个个性化的 ISAPI模块作为 IIS插件。这比 PHP 3.0更有效,它作为一个外部的程序来运行。
(16)内存:PHP 4.0能更有效的使用内存,导致较少的内存占用消耗,这主要归功于引用计数技术的实现。
(17)其他类成员函数:在 PHP 4.0你能在成员函数本身的作用域或全局范围内调用其他类的成员函数。例如,你能用一个子函数覆盖父函数,并在子函数中调用父函数。
(18)多维数组:在 PHP 4.0,利用GET,POST,Cookies的进行的数据传输支持多维数组。
(19)个性化的 HTTP Session支持:HTTP Session处理,包括 fallback系统管理,在 PHP 4.0被它的新库函数实现。在版本 3.0中处理Session要求使用 PHPLIB和第三方的库函数,它比把Session直接地由 PHP支持慢了许多。
(20)个性化的 Java支持:PHP 4.0支持和java的交互。这种个性化的Java支持为PHP在 Java对象上创建和使用方法提供一个简单并且有效的工具。
21)对象和数嵌套组:PHP 4.0实现了功能更加强大的对象,移去了 PHP 3.0存在的种种句法限制。对象能在数组以内被嵌套并且反过来也如此,可以根据你的需要实现嵌套。
(22)面向对象的编程:PHP 4.0为面向对象的编程和构造类及对象提供扩展的功能和新特征。PHP4实现了对象重载,引用技术等新技术。
(23)对象重载支持:对象重载语法允许第三方的基于面向对象的类库使用 PHP4的面向对象的特征存取他们自身的功能。使用这个特征的一个 COM模块已经被实现了。
(24)输出缓冲支持:PHP提供了一个输出缓冲函数集合。输出缓冲支持允许你写包裹函数功能压缩缓冲区。在 PHP4的输出缓冲支持允许 HTML头信息存放,无论 HTML的正文是否输出。头信息((header(), content type, and cookies)不采用缓冲。
(25)增加了PCRE库:PHP 4.0包括一个 Perl兼容的正则表达式(PCRE)库,和正常regex库一起与 PHP绑定。split和replace PCRE功能被支持。PCRE和 Perl正规表达式之间有一些细微差别。
(26)PHP.ini文件:PHP.ini文件在 PHP4.0被重新设计,使用的 PHP的配置PHP.ini是更容易并且更有效的。全部文件能被Apache在运行时间操作(在 Apache环境下)或由 Windows注册表(在 Windows下面)。被加入PHP.ini文件的配置指令自动地在所有相关的模块中被支持。
(27)引用计数:PHP 4.0为系统中的每个数值提供了引用计数,包括资源。一旦一个资源不再被任何变量引用,它自动地被释放以节省内存资源。利用这个特征的最明显的例子一个内置SQL查询的循环语句。在PHP 3.0中,每次递归另外的 SQL结果集合重复申请内存,直到脚本执行完毕,这些结果集合占用的内存才被释放。
(28)支持引用:通过引用可以改变一个变量的值。
(29)函数的运行时绑定:PHP 4.0的运行时间绑定功能允许你在他们被声明以前调用,无论声明是否在代码以后或是在运行时间。
(30)类的运行时信息:PHP 4.0支持在运行时刻存取下列类信息:一个对象的类名,一个对象的父类的类名字,以及对象函数所在的名字。
(31)服务器抽象层:为支持Web服务器提供了增强型 SAPI(服务器 API)接口,是 PHP 4。0不可分的一部分。这个服务器抽象层,提供了通用的WEB服务器接口支持,支持多线程WEB服务器,为大多数的WEB服务器提供透明的支持,这些服务器包括 Apache,IIS( ISAPI),以及 AOL服务器。
(32)语法的点亮显示:PHP 4.0语法的点亮显示允许开发者看见源代码而不是脚本,这个功能比PHP 3。0中的更有效。它跑得更快,更执行得更好,并且产生更紧凑的HTML代码。
(33)由引用改变变量的值:PHP 4.0由引用支持可变的赋值,“关联”的2个变量之中个的任何一个的值被改变,另外的变量的值同样被改变,这类似与C中的指针类型。
(34)在引用字符串中的变量引用:PHP 4.0增强了在引用字符串中的变量引用。例如,这个例子在 PHP 3.0中是不可能做到的: print“${a[0]->bingo}“
PHP在数据库方面的丰富支持,也是它迅速走红的原因之一,它支持下列的数据库或是数据文件:
而在 Internet上它也支持了相当多的通讯协议(protocol),包括了与电子邮件相关的 IMAP, POP3;网管系统 SNMP;网络新闻 NNTP;帐号共用 NIS;全球信息网 HTTP及 Apache服务器;目录协议 LDAP以及其它网络的相关函数。
除此之外,用 PHP写出来的 Web后端 CGI程序,可以很轻易的移植到不同的操作系统上。例如,先以 Linux架的网站,在系统负荷过高时,可以快速地将整个系统移到 SUN工作站上,不用重新编译 CGI程序。面对快速发展的 Internet,这是长期规划的最好选择。
在加入其它的模块之后,提供了更多样的支持如下:
除此之外,一般语言有的数学运算、时间处理、文件系统、字符串处理、行程处理等功能,它一样都不缺。再加上它是免费的系统,使得成本与效益比,几乎等于无限大!
无可置疑的,写 CGI的方式有很多种,而 PHP只是其中的一种选择罢了。对资深的网站站长来说,CGI的写作语言应是随着需求而更动。毕竟,在一个对系统反映速度要求极严格的系统而言,恐怕只有 NSAPI语言写的 CGI程序才能符合要求了。在其它的场合,相信使用 PHP来作为 CGI的语言是游刃有余,而且是最适合的。
程序语言 PHP ASP CGI NSAPI ISAPI
操作系统均可 Win32均可均可 Win32
Web服务器几种 IIS均可 Netscape Server IIS
程序语言 PHP VB不限 C/C++ C/Delphi
其中的 PHP可用在几种 Web服务器上;传统 CGI就不限是哪种操作系统或 Web服务器平台;NSAPI一定要在 Netscape的服务器(如 Netscape Enterprise Server或 FastTrack Server)上才可以执行,但可支持多种操作系统(UNIX或 Win32);ASP及 ISAPI只在 IIS上有完整的功能。
在稳定性上,由于 NSAPI或 ISAPI是动态连结的方式,因此在执行若出现问题,会使得 Web服务器一起瘫痪。而 ASP在吾人实际应用经验上,隔阵子就会使系统不稳定,需要重开操作系统。PHP在许多的站点使用上,不但长期使用都没有问题,而且程序的稳定性也不错。当然最稳的还是传统 CGI程序,因为它是由操作系统负责控制,不会因 CGI程序的错误导致 Web服务器的不稳定。
在开发及维护时间上,PHP及 ASP都有不错的表现。而 NSAPI及 ISAPI则需要长时间的开发过程,在稳定上线后,这二种语言反倒是效率最佳的方法。传统的 CGI程序则要视开发工具语言而定了,用 Perl或是 shell script不需要编译的过程,直接就可以执行,若用 Delphi或 VC/BCB甚至用组合语言等都要经过编译才能执行,至于用 VB来写传统 CGI,唉....。
要比较和网页结合的能力,PHP和 ASP是并驾齐驱的,其它的方式就不能内嵌 HTML语法了。而这也是影响开发时间的因素之一。
就系统安全性而言,ASP是最差的,在没有经过微软的 IIS Service Pack处理过,使用::$DATA就可以看到 ASP的源代码,这真是叫人不敢领教。当然,传统 CGI的程序,由于是由操作系统直接管理,要破解的难度最高,黑客必须由操作系统下手,而不能由 Web服务器下手。PHP在许多商业及非商业使用时,也没有听过有什么安全的问题。
在新增功能及改版方面,传统的 CGI由于不受任何语言限制,没有这方面的问题。PHP是最有活力的,数天至数周就有一个新版本出现,每次的新版,就代表更多的功能及更改更多的错误。其它的 ASP、NSAPI、ISAPI就视它的 Web服务器改版速度了,ASP要等到 IIS 5.0出现时,才会有 ASP 3.0。
总而言之,在 Web的后端 CGI程序,就像鱼与熊掌一般,没有高效能又开发方便的选择。不过相信 PHP是处于开发容易、效能亦不错的平衡点上。
如果说ASP是一个COM,那么PHP说的更精确了可以说PHP是一个纯粹的Script翻译器。这也是PHP由3.0升级为4.0的一个重大原因,在4。0这个版本中,由于重写了语法分析器,从而加快了PHP整体的效能。而且从中你也就会明白为什么PHP需要支持这种或是那种扩充功能时它一定要与相应系统的lib库进行再编绎的原因。正因为它是正宗的“翻译器”,所以它是将script翻译成为需要执行的函数,再去执行它们,外部扩充不能由一些“动态加载”的方式进行,所以只能静态的编绎进PHP中(这只能在windows中除外)。