首页 > 编程技术 > php

php提示Deprecated: Directive 'register_globals' is deprecated in PHP 5.3解决办法

发布时间:2016-9-20 14:01

     今天在命令模式执行一个php文件时提示Deprecated: Directive 'register_globals' is deprecated in PHP 5.3问题了,下面我们要如何处理呢,大家一起来看看


代码事下

I:\>cd www

I:\www>php a.php
PHP Deprecated:  Directive 'register_globals' is deprecated in PHP 5.3 and great
er in Unknown on line 0

Deprecated: Directive 'register_globals' is deprecated in PHP 5.3 and greater in
 Unknown on line 0

/*=================================================
====Name:dedecms 5.7 getshell                  ====
===================================================
====Usage:php  dede.php      ====
===================================================
====Team:C0dePlay  Team      ====
===================================================
====Author: Yaseng           ====
====Date: 2012-06-15 01:35:00                  ====
===================================================*/

I:\www>

原因分析

PHP 5.3 开始,配置文件 php.ini 中的一些配置将会在 PHP 执行时显示过时警告,这些配置将在 PHP6中不再存在,相关功能也将关闭。
define_syslog_variables
register_globals
register_long_arrays
safe_mode
magic_quotes_gpc
magic_quotes_runtime
magic_quotes_sybase

解决问题很简单

只需要在php.ini中,做如下的设置即可。

register_globals = Off

Cannot modify header information ? headers already sent by问题是一个大问题了,今天我们来看一篇关于Cannot modify header information ? headers already sent by问题解决办法。


发送头消息前不能有任何输出

任何修改或者发送HTTP头的函数都必须在 任何形式的输出 之前被调用

一些函数会修改HTTP头:

header/header_remove

session_start/session_regenerate_id

setcookie/setrawcookie

而输出主要可能如下:

隐性输出
在 <?php 之前或者 ?> 之后的空格
UTF-8文件的 BOM头
之前出现的报错信息
显性输出
 print , echo 和其它类似的输出函数
在 <?php 之间嵌入的原始html
为什么会出现Cannot modify header information &ndash; headers already sent by错误

为了理解为什么头消息必须早于输出,我们来看看典型的HTTP响应。PHP主要是生成HTML内容,但同时也传输了一组 HTTP/CGI 头给webserver:

HTTP/1.1 200 OK

Powered-By: PHP/5.3.7

Vary: DontTrackMeHere

Content-Type: text/html; charset=utf-8

<html><head><title>PHP page output page</title></head>

<body><h1>Content</h1> <p>Some more output follows...</p>

and <a href="/"> <img" width=100% src=internal-icon-delayed> </a>
输出总是尾随头消息出现。PHP必须首先传头消息给网页服务器,并且只能传一个。在两个换行之后再也不能为头消息添加任何内容了。

当PHP收到第一个输出后(例:print,echo,&hellip;),它会刷新并发送设置的所有头信息。然后就可以就可以随心所欲的输出了,但是此时已经无法修改HTTP头信息了。

如何找到早于头消息的输出

报错信息中已经包含了所有相关能够定位错误的信息:

Warning: Cannot modify header information - headers already sent by (output started at /www/usr2345/htdocs/auth.php:52) in /www/usr2345/htdocs/index.php on line 100
可以看到header在文件的100行被调用。

&ldquo;output started at&rdquo; 则包含着更重要的信息:直接指名在auth.php的52行已经产生了输出。这就是我们需要找的。

一般情况:

print,echo
原始的HTML语句

<!DOCTYPE html>

<?php
//已经不能修改或发送头消息了
 <?php 之前的空格
<?php
//这里有一个空格
UTF-8 BOM

这是更不易察觉,但比较普遍出现的情况。确保用你的编辑器保存文件以&ldquo;UTF-8 (no BOM)&rdquo;方式保存。

报错信息形如 &ldquo;Unknown on line 0&rdquo;

一般这样的报错说明输出来自PHP扩展或者PHP.ini设置错误信息

Maximum execution time of 30是告诉我们程序超时了,脚本超时了要解决的话可以设置脚本的运行时间或优化程序了,下面我们一起来看PHP程序时出现 Fatal error: Maximum execution time of 30 seconds exceeded in解决办法。


由于近日做的程序中涉及到的循环比较多且处理的情况较复杂,所以在运行程序时出现执行超时提示如下: Fatal error: Maximum execution time of 30 seconds exceeded in D:\php\AppServ\www\sum3\test.php on line 3


很简单,意思是说脚本执行时间超过了30秒的上限。这个错误以前经常碰到,一般都是直接在页面头部加个 set_time_limit(0) 处理,今天特意将这个错误的处理方法做一下总结。


1.修改php的配置文件,找到php.ini文件,它一般应该放在你的C:\WINDOWS目录下,然后找到 max_execution_time = 30 ;//设置成你想要的值,单位是秒, 这一行,这就是设置的执行时间最大值为30秒,你可以对这个值进行一下修正,改为你的期望值。(也可以直接设置成:max_execution_time = 0)

2.使用ini_set()函数,不是所有人都能修改php.ini文件的,那么你可以使用这个函数来改变你的最大执行时间限制值,如: ini_set('max_execution_time', '100'); 则设置为100秒,你也可以设置为0,那么就是不限制执行的时间。

3.使用set_time_limit()函数,set_time_limit(20)则表示最大执行时间加上20秒,但如果在php执行安全模式时,set_time_limit()将不会有结果,除非你用了第一种方法。

以下是部分讲解:set_time_limit --- 限制最大的执行时间set_time_limit(PH3 , PHP4)set_time_limit --- 限制最大的执行时间语法 : void set_time_limit (int seconds)说明 : 设定一个程式所允许执行的秒数,如果到达限制的时间,程式将会传回错误。

它预设的限制时间是30秒,max_execution_time的值定义在结构档案中(在PHP3中叫做php3.ini,在PHP4则叫做php.ini),如果将秒数设为0,表示无时间上的限制。

当呼叫此函式时,set_time_limit( )会从零重新开始计算最长执行的时间,也就是说,如果最长执行时间为预设的30秒,而在呼叫此函式set_time_limit(20)之前已花了25秒来执行程式,则程式最长执行的时间将会是45秒。

注意 : 当PHP是执行在安全模式时,set_time_limit( )将不会有结果,除非是关闭安全模式或是修改结构档案中(在PHP3中叫做php3.ini,在PHP4则叫做php.ini)的时间限制。


案例:如果没有打开安全模式,设置程序运行时间为25秒。例如:


<?php

if(!ini_get('safe_mode')){

    set_time_limit(25);

}

我们看到英文Call to undefined method就知道是因为函数或方法没有定义了,这个对于插件就有可能是什么功能没有开启了,我们下面来看看Call to undefined method DebugBar\\DebugBar::info()问题解决方法

使用 Laravel 的调试工具 laravel-debugbar 的 Facade 方式 Debugbar::info(), Debugbar::error()等方法打印日志消息,页面打不开,查看 PHP 错误日志报错:Call to undefined method DebugBar\\DebugBar::info().

请确保按照https://github.com/barryvdh/laravel-debugbar上的文档安装的,别忘了执行 composer dump-autoload.

如果你找不到原因,可能是命名空间引用错了,改成


use Barryvdh\Debugbar\Facade as Debugbar;

再用 Facade 的方式调用:

Debugbar::info('test debug info');

这个时候发现可以了,如图:

不过这样使用有点不方便了,这个组件的 Facade 的定义方式有点奇怪,不应该这样去定义,先就这样用吧,或者自己定义一个全局函数,直接通过 app(&lsquo;debugbar&rsquo;) 这种方式去调用。吧。

标签:[!--infotagslink--]

您可能感兴趣的文章: