首页 > 编程技术 > php

apache弹出错误应用程序 httpd.exe,版本 2.2.22.0,错误模块 php5ts.dll提示

发布时间:2016-11-25 17:37

比较悲剧的是今天使用了cdn+文件缓存,结果网站出现一些内容不正常了,我折腾了半天没发现问题于时重启了服务器,结果重启之后apache 弹出错误应用程序 httpd.exe,版本 2.2.22.0,错误模块 php5ts.dll提示了,我查看了一下系统日志发现一段长长的代码,如下所示

apache错误提示

事件类型: 信息
事件来源: Application Error
事件种类: (100)
事件 ID: 1004
日期:  2014-6-27
事件:  15:55:13
用户:  N/A
计算机: xxxx
描述:
报告队列中的错误: 错误应用程序 httpd.exe,版本 2.2.22.0,错误模块 php5ts.dll,版本 5.2.17.17,错误地址 0x000acde5。

有关更多信息,请参阅在 http://go.microsoft.com/fwlink/events.asp 的帮助和支持中心。
数据:
0000: 41 70 70 6c 69 63 61 74   Applicat
0008: 69 6f 6e 20 46 61 69 6c   ion Fail
0010: 75 72 65 20 20 68 74 74   ure  htt
0018: 70 64 2e 65 78 65 20 32   pd.exe 2
0020: 2e 32 2e 32 32 2e 30 20   .2.22.0
0028: 69 6e 20 70 68 70 35 74   in php5t
0030: 73 2e 64 6c 6c 20 35 2e   s.dll 5.
0038: 32 2e 31 37 2e 31 37 20   2.17.17
0040: 61 74 20 6f 66 66 73 65   at offse
0048: 74 20 30 30 30 61 63 64   t 000acd
0050: 65 35                     e5     

直接百度搜索问题

解决版本有两个:

1.复制php5ts.dll到apaceh的bin目录下或者系统目录下c:/windows/system32后,重启系统。

2.php目录下的libmysql.dll拷贝到到系统目录system32下就好了。

突然出这个问题也担心是中毒了所以对服务器进行了一些限制操作,在php.ini中加上了

disable_functions =  phpinfo,passthru,exec,system,chroot,scandir,chgrp,chown,shell_exec,proc_open,proc_get_status,ini_alter,ini_alter,ini_restore,dl,pfsockopen,openlog,syslog,readlink,symlink,popepassthru,stream_socket_server,fsocket,fsockopen

然后重启apache,问题解决了

在php中碰到中文文件名乱码一般都是初学者了,因为我们一般不会使用中文文名了,因为大家都知道php对中文支持不友好,那么我们要如何解决php中文文件名乱码问题呢?下面一聚教程小编给各位整理了一些方法,下面一起来看看。

原因是编码问题,所以要转码,用户PHP里面的 iconv 函数就可以解决:

iconv(“当前使用的编码如:utf-8″,”要转换的编码如:GB2312″,”文件名”);
实例:

 代码如下 复制代码

$file_name="我的文件.jpg";
$file_name=iconv("utf-8","gb2312",$file_name);   //解决中文乱码问题
echo '$file_name';

例子

 代码如下 复制代码

<?php
//执行创建中文名html文件
file_put_contents(PHPCMS_PATH.'test/'.iconv('UTF-8', 'GBK', '中文名').'.html', 'xxxxxxxxxxx');

?>

另一种解决中文乱码问题在于

 代码如下 复制代码

$sFileName = "sda.php";
$sOriginalFileName = $sFileName;
$sExtension = s str($sFileName, (strrpos($sFileName, '.') + 1));//找到扩展名
$sExtension = strtolower($sExtension);
$sFileName = date("YmdHis").rand(100, 200).".".$sExtension; //这样就是我们的新文件名了,全数字的不会有乱码了哦。

我们还可以使用urlencode来进行编译

如  urlencode('中文');

例子

 代码如下 复制代码

$file = "/tmp/中文名.tar.gz";

$filename = basename($file);

header("Content-type: application/octet-stream");

//处理中文文件名
$ua = $_SERVER["HTTP_USER_AGENT"];
$encoded_filename = urlencode($filename);
$encoded_filename = str_replace("+", "%20", $encoded_filename);
if (preg_match("/MSIE/", $ua)) {
 header('Content-Disposition: attachment; filename="' . $encoded_filename . '"');
} else if (preg_match("/Firefox/", $ua)) {
 header("Content-Disposition: attachment; filename*="utf8''" . $filename . '"');
} else {
 header('Content-Disposition: attachment; filename="' . $filename . '"');
}

header('Content-Disposition: attachment; filename="' . $filename . '"');
header("Content-Length: ". filesize($file));
readfile($file);

注意:我的服务器是windows xp、apache,估计xp字符集是gbk。因为我的php代码保存为utf-8格式的,在给文件名命名时会出现乱码的情况,所以可以用iconv()函数将原本的utf-8格式的文件名转换为gbk格式的。

今天在使用一个正则提取字符串中指定字符串内容时我在使用一个is_array()时出现Array to string conversion错误提示了,下面把这个给大家分享一下吧。

例子

$str = preg_match_all('/(<UL class=\"list\">).*?(<\/UL>)/is', $str,$array);

if(is_array($$arrayList[0]) )
{
}

结果发现

Notice: Array to string conversion in E:\get_data.php on line 45

Notice: Undefined variable: Array in E:\get_data.php on line 45

仔细检查一下发现

is_array($$arrayList[0]多了一个美元了,如果说是RMB就好了

我们修改一下

if(is_array($arrayList[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());


友情提示

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

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);

总结:

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

标签:[!--infotagslink--]

您可能感兴趣的文章: