php Notice: Undefined index错误解决办法

 更新时间:2016年11月25日 17:37  点击:1487
Undefined index是告诉我们变量未定义或变量申明有点问题才会告诉我们一个并不致命的warning,那么我们要如何来解决这些问题呢?下面一聚教程小编来给各位整理了一些解决warning问题的方法。

1.找到未定义变量进行处理

 代码如下 复制代码

addslashes(htmlspecialchars(isset($_POST[$str])?$_POST[$str]:''));


2.把错误给过滤掉

 代码如下 复制代码

@$page=$_GET["page"];

3.修改php.ini配置文件进行所有错误过滤

 代码如下 复制代码

error_reporting = E_ALL & ~E_NOTICE

或者
ini_set( ‘error_reporting’, E_ALL ^ E_NOTICE );

ini_set( ‘display_errors’, ’0′ );

4.在程序中直接加一个处理

 代码如下 复制代码

if (!$cfg['debug']) {
 error_reporting(0);
 ob_start('ob_gzhandler');
} else {
 error_reporting(E_ALL ^ E_NOTICE);
}

5.在php文件最开始处加如下一句代码

 代码如下 复制代码

error_reporting(0);

总结:

上面所有方法中最好的方法是方法一,这样在对程序性能上是有很好的帮助,如果你页面错误过多直接过滤掉会影响性能的哦,我以前介绍过一篇这样的文章大家可在本地搜索。

php页面空白我们从几个方法入手,一个是php把错误提醒功能给关闭了,另一个是程序没有返回结果,当然如果是使用了php操作数据库我们可以数据库报错未进行判断处理,下面我们从这三个方法来给大家分析php页面空白不报错解决办法。

1.php程序不报错

windows系统,我们在找到apache安装目录下的php.ini

display_errors = Off 改成 display_errors = On

linux系统 PHP配置文件路径:/uer/local/php/etc/php.ini

display_errors = Off 改成 display_errors = On

还有程序中是不是加有

error_reporting = E_ALL;   /* 最严格的错误报告级别, 开发阶段可开启 */

error_reporting = E_ALL &~ E_NOTICE /* 除了notice以外的错误 */

error_reporting = E_ERROR | E_PARSE | e_CORE_ERROR /* 只考虑致命的运行时错误,新解析错误

如果有我们把它们取消掉

2.php程序执行没有结果返回

例子

function abc()
{
  echo 'http://www.111cn.net';
}

你直接执行页面就是空白页面了,我们需要执行调用函数

echo abc();才会有输出

3.数据库sql错误,但没有给出错误报告提示

例子

$sql ="select * from a where aaaaf=ccc ";
mysql_query( $sql );

这样执行sql有错误但也没有错误提示我们只要在后在加上mysql_error();即可

$sql ="select * from a where aaaaf=ccc ";
mysql_query( $sql ) or die(mysql_error());


友情提示

有些时间我们是页面编码错误也有可能是页面空白哦,不过开启了错误提醒功能还是会显示出来哦。

curl乱码有两个方面的原因一个是因为我们采集页面的php页面编码与远程文档编码不致导致的,另一种可能是页面进入了gzip压缩传输导致的,那么我们要如何解决这些问题呢?

gzip压缩传输导致乱码

今天在采集京东的时候发现返回的数据是乱码,网上说可能和压缩有关,看了一下京东的头信息的确进行gzip加密,好吧,那就解压吧

 代码如下 复制代码

$return = gzdecode($return); //将return的字符进行解码

另一种解决办法

curl_setopt($ch, CURLOPT_ENCODING, 'gzip');


页面编码问题

 代码如下 复制代码

mb_convert_encoding($str, 'utf-8', 'GBK,UTF-8,ASCII');就行了

在使用php curl获取网页内容有些网站提示405 method not allowed状态码了,这个问题我分析了出问题的网站是因为ipv6而导致了,所以我们只要简单的调整一下就可以解决这个问题了,下面一起来看看吧。

1.php curl ipv4使用例子

 代码如下 复制代码

/**
 * http测试
 * 注:PHP版本5.2以上才支持CURL_IPRESOLVE_V4
 * @param $url 网站域名
 * @param $type 网站访问协议
 * @param $ipresolve 解析方式
 */
public function web_http($url,$type,$ipresolve) {
//设置Header头
$header[] = "Accept: application/json";
  $header[] = "Accept-Encoding: gzip";
$httptype = function_exists('curl_init');
if (!$httptype) {
$html = file_get_contents($url);
} else {
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
//输出头信息
curl_setopt($ch, CURLOPT_HEADER, 1);
//递归访问location跳转的链接,直到返回200OK
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
//不对HTML中的BODY部分进行输出
curl_setopt($ch, CURLOPT_NOBODY, 1);
//将结果以文件流的方式返回,不是直接输出
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
//以IPv4/IPv6的方式访问
if($ipresolve=='ipv6') {
curl_setopt($ch,CURLOPT_IPRESOLVE,CURL_IPRESOLVE_V6);
}else{
curl_setopt($ch,CURLOPT_IPRESOLVE,CURL_IPRESOLVE_V4);
}
//添加HTTP header头采用压缩和GET方式请求
curl_setopt( $ch, CURLOPT_HTTPHEADER, $header );
curl_setopt($ch,CURLOPT_ENCODING , "gzip");
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'GET');
//清除DNS缓存
curl_setopt($ch,CURLOPT_DNS_CACHE_TIMEOUT,0);
//设置连接超时时间
curl_setopt($ch,CURLOPT_CONNECTTIMEOUT,15);
//设置访问超时
curl_setopt($ch,CURLOPT_TIMEOUT,50);
//设置User-agent
curl_setopt($ch,CURLOPT_USERAGENT,'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/536.11 (KHTML, like Gecko) Chrome/20.0.1132.47 Safari/536.11');
if($type=="https") {
//不对认证证书来源的检查
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
//从证书中检查SSL加密算法是否存在 
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, true);
}
//执行Curl操作
$html = curl_exec($ch);
//获取一个cURL连接资源句柄的信息(获取最后一次传输的相关信息)
$info = curl_getinfo($ch);
curl_close($ch);
}
return $info;
}

上面代码在ipv4是没有任何问题了,如果在了ipv6网站就会返回405 method not allowed状态码了,那么我们查看了php手册发现只要简单的修改一下即可。

以上为我编写的一个基本curl访问的方法,因为我这里需要通过使用IPv6的方式,所以加了相应的选项,相信大家能看的明白,平时经常用到的选项上面都有出现,大家根据需要摘取。

405/Method Not Allowed,表示不支持请求的方法,这个错误不常见。

导致403错误是要是由于curl默认是用post方式进行提交访问的,post方式在此域名下是没有权限的,如我在测试www.111cn.net的时候就出现了此问题,在我修改为get的方式,并且增加了header头后,即可正常访问,个人推测,或许是亚马逊那边基本上都是采用get的方式,才会被认为是人为的点击,对post做了相应屏蔽。

ipv6增加了如下代码:

 代码如下 复制代码

//设置Header头
$header[] = "Accept: application/json";
$header[] = "Accept-Encoding: gzip";
//添加HTTP header头采用压缩和GET方式请求
curl_setopt( $ch, CURLOPT_HTTPHEADER, $header );
curl_setopt($ch,CURLOPT_ENCODING , "gzip");
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'GET');

命令行的形式为:


curl -v www.111cn.net


IPV6下curl超时问题

 代码如下 复制代码

<?php

$ch = curl_init();
curl_setopt ($ch, CURLOPT_URL, $url);
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, true);
//设置curl默认访问为IPv4
if(defined('CURLOPT_IPRESOLVE') && defined('CURL_IPRESOLVE_V4')){
curl_setopt($ch, CURLOPT_IPRESOLVE, CURL_IPRESOLVE_V4);
}
//设置curl请求连接时的最长秒数,如果设置为0,则无限
curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
//设置curl总执行动作的最长秒数,如果设置为0,则无限
curl_setopt ($ch, CURLOPT_TIMEOUT,$timeout*3);
$file_contents = curl_exec($ch);
curl_close($ch);

 
注:curl_setopt($ch, CURLOPT_IPRESOLVE, CURL_IPRESOLVE_V4) 只有在php版本5.3及以上版本,curl版本7.10.8及以上版本时,以上设置才生效。

phpmyadmin中显示中文是如下图乱码,但是我们利用php连接mysql数据库之后发现并没有这个问题,那么问题原因就是我们数据库内容没问题只存在了phpmyadmin编码设置问题了,下面来简单的介绍问题解决方法吧。

phpmyadmin界面乱码

效果如我们的中文表都是乱码了(注意:我使用的是国外的linux空间了,使用国内的没问题)

 

phpmyadmin中中文乱码 英文没问题(但在网页显示正常)

出现这个问题我们一可以不使用国外主机现成的phpmyadmin了,我们自己下载一个phpmyadmin上传上去,这样一般可以解决问题,如果不行我们参考下面办法

phpmyadmin乱码解决

1. 因为MySQL的默认编码是latin1,所以首先我们需要修改一下PHPMyAdmin的编码转换。修改libraries目录下面的select_lang.lib.php文件,将

 代码如下 复制代码
[indent]
'utf-8' => 'utf8',
修改成
'utf-8' => 'latin1',
[/indent]


2. 接下来还要修改一下页面的编码显示,将

 代码如下 复制代码
[indent]
'zh-gb2312' => array('zh|chinese simplified', 'chinese_simplified-gb2312', 'zh'),
修改成
'zh-gb2312-utf-8' => array('zh|chinese simplified', 'chinese_simplified-gb2312', 'zh'),
[/indent]

也就是在zh-gb2312后面增加-utf-8,这样页面编码就支持UTF-8了。

3. 首先选择zh-gb2312-utf-8进入PHPMyAdmin,这个时候浏览GB2312编码的数据正常,但是浏览UTF-8的数据是乱码。如果浏览UTF-8的数据的话,进入首页,然后在Language里面选择zh-utf-8就可以了

php页面中文乱码

如果是程序页面错误我们可参考一面方法

数据库中,所有表和有中文的字段指定使用编码:utf8_unicode_ci,注意表和字段都需要指定!

:数据库连接的时候指定编码:

 代码如下 复制代码

mysqli_query($db_conn, "SET NAMES utf8");//指定脚本到数据库的编码

mysqli_query($db_conn, "set character_set_client=utf8"); //指定mysql内部的数据到磁盘编码

mysqli_query($db_conn, "set character_set_connection=utf8");//指定mysql的连接层编码

mysqli_query($db_conn, "set character_set_results=utf8");//指定mysql查询磁盘到数据结果的编码

这样页面问题也就解决了

[!--infotagslink--]

相关文章

  • Ecshop提示Only variables should be passed by reference in错误

    在安装好ecshop软件之后我们打开首页时提示Only variables should be passed by reference in错误了,碰到这个问题是什么原因呢?下面我们就一起来看看解决办法吧。...2016-11-25
  • PHP session_start()很慢问题分析与解决办法

    本文章来给各位同学介绍一下关于PHP session_start()很慢问题分析与解决办法,希望碰到此问题的同学可进入参考。 最近在做东西的时候发现一个问题 有一个接口挂...2016-11-25
  • 409错误是什么 http 409错误怎么解决

    409错误是什么?http 409错误怎么解决呢?不少站长在遇到这个错误代码之后都一筹莫展,本次一聚教程网为大家带来了详细的说明,快来看看吧。 409错误是什么: HTTP 40...2017-01-22
  • 414错误是什么 414错误怎么解决

    414错误是HTTP协议状态码中的一种,很多都还不知道414错误是什么,以及不知道怎么解决414错误,那么就来看看小编带来的介绍吧。 414错误是什么: HTTP 414错误,(Requ...2017-01-22
  • http 405错误是什么 http 405错误怎么解决

    http 405错误是什么?http 405错误怎么解决?相信很多站长都在找这两个问题的答案,本次小编为大家带来了详细的教程,快来看看吧。 405错误是什么: HTTP 405错误是H...2017-01-22
  • php中json_decode()和json_encode()用法与中文不显示解决办法

    本文章介绍了关于php中json_decode()和json_encode()用法与中文不显示解决办法,有需要的朋友可以参考一下下。 php中json_decode()和json_encode() 1.json_decode(...2016-11-25
  • phpexcel导出数据身份证后四位0000解决办法

    在php中我们如果要导入excel数据我们通常会使用phpexcel插件了,但是有朋友会发与使用phpexcel导出数据出现身份证后四位是0000情况了,下面我们就来看解决办法。 最...2016-11-25
  • 401错误码代表什么 401错误解决办法

    401是HTTP状态码的一种,属于“请示错误”,表示请求可能出错,已妨碍了服务器对请求的处理。具体的401错误是指:未授权,请求要求进行身份验证。登录后,服务器可能会返回对页面...2017-01-22
  • http 402错误是什么 http 402简介

    http 402错误是什么?402错误较为少见,一般不轻易出现,下面小编就来告诉大家402错误是什么吧。 HTTP 402错误是HTTP状态码的一种,表示“要求付费”; 所求的...2017-01-22
  • 411错误是什么 411错误怎么解决

    411错误是HTTP协议状态码的一种,很多人都还不知道411错误是什么,本次一聚教程网将为大家进行解答,并且告诉大家411错误怎么解决。 411错误是什么: HTTP 411错误,(Lengt...2017-01-22
  • apache网站提示503错误解决办法

    Apache status 503 的原因大致有如下几种情况 : 1、 CPU 负载过高,服务器响应不过来,返回503 2、 系统连接数超限,超过MaxVhostClients的上限,返回503 3、 单IP连接数超限,超过M...2016-01-28
  • 404错误是什么 404错误怎么解决

    403错误是网站访问过程中,常见的错误提示。资源不可用,服务器理解客户的请求,但拒绝处理它。通常由于服务器上文件或目录的权限设置导致,比如IIS或者apache设置了访问权限...2017-01-22
  • 403错误是什么 403错误怎么解决

    403错误是HTTP状态码的一种,属于“请示错误”,表示服务器拒绝请求。如果在搜索引擎尝试抓取您网站上的有效网页时显示此状态代码,那么,这可能是您的服务器或主机拒绝搜索...2017-01-22
  • 412错误是什么 412错误怎么解决

    412错误是什么?412错误怎么解决?本次一聚教程网将为大家带来详细的介绍,帮助大家全面了解412错误的意思以及解决412错误的方法。 412错误是什么: HTTP 412错误,(Precond...2017-01-22
  • 解决springboot使用logback日志出现LOG_PATH_IS_UNDEFINED文件夹的问题

    这篇文章主要介绍了解决springboot使用logback日志出现LOG_PATH_IS_UNDEFINED文件夹的问题,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-04-28
  • Perl CPAN::Modulelist的解决办法

    今天用CPAN安装Term::ReadLine,报了个这样的错误 Going to read /root/.cpan/sources/modules/03modlist.data.gz Can't locate object method "data" via package "C...2016-11-25
  • HTTP 408错误是什么 HTTP 408错误解决方法

    相信很多站长都遇到过这样一个问题,访问页面时出现408错误,下面一聚教程网将为大家介绍408错误出现的原因以及408错误的解决办法。 HTTP 408错误出现原因: HTT...2017-01-22
  • 407错误是什么 407错误怎么解决

    407错误是什么?407错误怎么解决?不少站长都遇到过407错误,下面小编将告诉大家如何处理407错误。 407错误是什么: HTTP 407错误是HTTP协议状态码的一种,表示需要代...2017-01-22
  • 406错误是什么 406错误怎么解决

    HTTP 406错误是HTTP协议状态码的一种,表示无法使用请求的内容特性来响应请求的网页。一般是指客户端浏览器不接受所请求页面的 MIME 类型。 而MIME类型是在把输出...2017-01-22
  • 410错误是什么 http 410错误怎么解决

    410错误是HTTP协议状态码的一种,本次一聚教程网将为大家详细介绍HTTP 410错误是什么,以及410错误的解决办法。 410错误是什么: HTTP 410错误是HTTP协议状态码的...2017-01-22