奇怪的linux网络不通事件

一个客户Centos Linux系统出现dz通信失败,
ssh登录到服务器后发现,服务器有双ip, 1.1.1.1 和 1.1.1.2
经询问得知原来1.1.1.1 废弃不用,更改为1.1.1.2,但是原来的系统管理员图省事,
只是增加了1.1.1.2的新ip,并未去掉老的ip,导致服务器对外ping和从服务器的主动动作都
被认为是从老的ip发出,估计外围交换机做了限制,导致失败
去掉旧ip,只保留新ip,问题解决

utf8 with bom 的文件清理掉bom不可见字符

如果你的php文件用notepad++打开后,右下角是这样的,注意 UTF-8-BOM,那么此文件需要修改为 不含BOM头的UTF-8文件,方法是

点击菜单-》格式-》转为UTF-8 无BOM编码格式,保存即可

editplus 清除方法点此

有关bom https://www.w3.org/International/questions/qa-utf8-bom

科普: BOM is byte-order mark

另:今天一个客户的thinkphp模版调用utf8 bom 的模版时候,模版里面是frameset,结果导致内容不显示,所以还是要好好处理这个隐蔽的问题啊

phpcms伪静态自定义

首先增加内容模块的url定义

phpcmsurl1

然后把要启用此规则的分类设置为此规则

phpcmsurl2

修改代码 phpcms\modules\content\classes\url.class.php 修改如下内容

phpcmsurl4

增加 .htaccess

phpcmsurl3

修改的代码下载看这里

注意,以上只是例子代码, catid=6是原始phpcms里面国内新闻对应的id,你正式应用
请修改为你自己的,并且每一个 栏目的伪静态都 大概需要增加这样4行伪静态代码,

注意,不建议做多级嵌套的栏目类分类,比如 /guonei/lanmu1/  , /guonei/lanmu2/
最好只做一级目录就好了

杰奇jieqi 的opf问题,wap端读取opf数据不是最新的

很奇怪的一个错误, 经过简单的核查, 发现出现这种错误的小说占那么一部分.

大致情况是这样
我的小说站数据pc/wap 是共用一个的, pc端一点问题都没有.
而在wap有的小说是没问题的, 有问题的则是打开目录没有问题, 前一部分章节没有问题, 但是后面的章节内容 点之后出现类似PC端404的意思. 给浏览器的显示页面还是当前小说的目录页(没有调出小说内容页), 但是很多数据已经没了, 比如所属类别, 小说名, 最新章节.

仔细检查发现了下面的问题:
1. 出问题的章节, 应该都是类似PC的404页面, 但是却可以调用出部分数据.
2. A小说共100章, 第51章出了问题, 那么在第50章内容页, 点下一章的时候, !!!发现提交的URL是当前小说的目录页.!!!

根据 modules/article/wapreader.php?aid=57549&cid=9345391

查看到 wapreader.php 里面

if(!$package->showChapter($_REQUEST[‘cid’]))
{
echo __LINE__;die();
$package->showIndex();
}

知道应该是  $package->showChapter函数的问题

进而查找 class/wappackage.php 里面
function showChapter($cid)
{
global $jieqiConfigs;
global $jieqi_file_postfix;
$i=0;
$num=count($this->chapters);
while($i<$num){
$tmpvar=$this->getCid($this->chapters[$i][‘href’]);
if($tmpvar==$cid){
$this->makeHtml($i+1, true, true);
return true;
}
$i++;
}
return false;
}

应该是循环后得到了false值,那么为什么呢,说明 $this->chapters 这个值里面没有$_REQUEST[‘cid’]的参数,那么 $this->chapters 从何而来呢,
发现 loadOPF() 函数读取 index.opf ,得到 chapters的数组,里面包含的章节的标题和地址,那么只需要更新这个 index.opf 就能得到最新的数据,那么
$tmpvar=$this->getCid($this->chapters[$i][‘href’]);
就能得到某个章节的值了.
问题解决

nginx 的php配置支持php-fpm和Apache,失败后自动切换

其中 error_page 502 = @apache; 是关键!!!

 location ~ .*\.php$
{
        error_page 502 = @apache;
        fastcgi_pass  127.0.0.1:9002;
        fastcgi_index index.php;
        fastcgi_param GATEWAY_INTERFACE CGI/1.1;
        fastcgi_param SERVER_SOFTWARE nginx;
        fastcgi_param QUERY_STRING $query_string;
        fastcgi_param REQUEST_METHOD $request_method;
        fastcgi_param CONTENT_TYPE $content_type;
        fastcgi_param CONTENT_LENGTH $content_length;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_param SCRIPT_NAME $fastcgi_script_name;
        fastcgi_param REQUEST_URI $request_uri;
        fastcgi_param DOCUMENT_URI $document_uri;
        fastcgi_param DOCUMENT_ROOT $document_root;
        fastcgi_param SERVER_PROTOCOL $server_protocol;
        fastcgi_param REMOTE_ADDR $remote_addr;
        fastcgi_param REMOTE_PORT $remote_port;
        fastcgi_param SERVER_ADDR $server_addr;
        fastcgi_param SERVER_PORT $server_port;
        fastcgi_param SERVER_NAME $server_name;
        # PHP only, required if PHP was built with --enable-force-cgi-redirect
        fastcgi_param REDIRECT_STATUS 200;
}

 location @apache {
        proxy_pass http://127.0.0.1:88;
        proxy_connect_timeout 30s;
        proxy_send_timeout   90;
        proxy_read_timeout   90;
        proxy_buffer_size    32k;
        proxy_buffers     4 32k;
        proxy_busy_buffers_size 64k;
        proxy_redirect     off;
        proxy_hide_header  Vary;
        proxy_set_header   Accept-Encoding '';
        proxy_set_header   Host   $host;
        proxy_set_header   Referer $http_referer;
        proxy_set_header   Cookie $http_cookie;
        proxy_set_header   X-Real-IP  $remote_addr;
        proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;
}

某些php视频网站程序无法截图和转换视频的问题

类似 clip-share ,AVS 一类的php程序,这linux安装环境,也配置好了诸如ffmpeg , 等等工具,可仍然无法转换视频,查看此类问题的方法是这这类php程序的log里找,比如 tmp/logs/XXX.log 等文件,里面的前面几行一般是运行的命令行,当你手动去运行那个命令行语句的时候,就会调试出问题,有时候碰到的情况是,cli 模式的php使用的php.ini 居然和 web 服务器用的并非一个php.ini ,这时候就需要统一双方的差异了。

discuz QQ登录 20003问题

出现20003问题,
qq20003-1

 

此问题主要是因为 在获取token时候

http://openapi.qzone.qq.com/oauth/qzoneoauth_request_token

造成失败导致。

在  source/plugin/manyou/Service/Client/ConnectOAuth.php的connectGetRequestToken 里面没有正常获取,如图

qq20003-2

 

public function connectGetRequestToken($callback, $clientIp = '') {

		$extra = array();

		$extra['oauth_callback'] = rawurlencode($callback);

		if ($clientIp) {
			$extra['oauth_client_ip'] = $clientIp;
		}
 
		$this->setTokenSecret('');
		$response = $this->_request($this->_requestTokenURL, $extra);
		 
		while( trim($response) == 'error_code=20003'     )
		{
			 $response = $this->_request($this->_requestTokenURL, $extra);
		}
		
	 

		parse_str($response, $params);


		//var_dump($params);die();

		if($params['oauth_token'] && $params['oauth_token_secret']) {
			return $params;
		} else {
			
			$params['error_code'] = $params['error_code'] ? $params['error_code'] : self::RESPONSE_ERROR;
			throw new Exception($params['error_code'], __LINE__);
		}

	}

nginx的godaddy ssl 证书配置

openssl genrsa -des3 -out server.key 2048
生成server.key

openssl rsa -in server.key -out server.key
去除server.key 里面密码

openssl req -new -key server.key -out server.csr
生成server.csr

提交server.csr 内容到godaddy,审核后下载zip文件
把里面的非gd_bundled的文件和server.key 合并为pem

cat bf5d584ffa226fa6.crt server.key > /etc/nginx/server.pem
cp server.key /etc/nginx/server.key

nginx的配置里面这样写

ssl on;
ssl_certificate /etc/nginx/server.pem;
ssl_certificate_key /etc/nginx/server.key;

微软msvc X 的运行库下载

MS VC 6

Microsoft Visual C++ 2005 Redistributable Package

32位(x86): http://www.microsoft.com/zh-cn/download/details.aspx?id=3387

64位(x64):  http://www.microsoft.com/zh-cn/download/details.aspx?id=21254

MS VC 9

Microsoft Visual C++ 2008 Redistributable Package

32位(x86):http://www.microsoft.com/zh-CN/download/details.aspx?id=5582
64位(x64):http://www.microsoft.com/zh-CN/download/details.aspx?id=15336

MS VC 10

Microsoft Visual C++ 2010 Redistributable Package

32位(x86): http://www.microsoft.com/zh-cn/download/details.aspx?id=5555
64位(x64):http://www.microsoft.com/zh-cn/download/details.aspx?id=14632

MS VC 11

Microsoft Visual C++ 2012 Redistributable Package

https://www.microsoft.com/zh-CN/download/details.aspx?id=30679

MS VC 12

Microsoft Visual C++ 2013 Redistributable Package

https://www.microsoft.com/zh-CN/download/details.aspx?id=40784

MS VC 14

Microsoft Visual C++ 2015 Redistributable Package

https://www.microsoft.com/zh-cn/download/details.aspx?id=53587

suphp 方式下 多版本php共存的配置

参考部分文档地址
http://www.kvm.la/apache-php52-with-php53.html

经检验发现 此文中基本正确除了  .htaccess 需要这样写

<FilesMatch “\.(inc|php|php3|php4|php5|php6|phtml|phps)$”>
AddHandler x-httpd-php52 .inc .php .php3 .php4 .php5 .php6 .phtml
</FilesMatch>

!!!首先你得会编译一份fastcgi模式的php哦!!!

 

其余需要配置的文件和参考地址相同,现在列出如下

/usr/local/suphp/etc/suphp.conf

[handlers]
;Handler for php-scripts
x-httpd-php5=”php:/usr/local/php5/bin/php-cgi”
x-httpd-php52=”php:/usr/local/webserver/php/bin/php-cgi”

 /etc/httpd/conf/extra/httpd-suphp.conf

<IfModule mod_suphp.c>
<FilesMatch “\.(inc|php|php3|php4|php5|php6|phtml|phps)$”>
AddHandler x-httpd-php5 .inc .php .php3 .php4 .php5 .php6 .phtml
</FilesMatch>
<Location />
suPHP_Engine on
suPHP_ConfigPath /usr/local/etc/php5/cgi/
suPHP_AddHandler x-httpd-php5
suPHP_AddHandler x-httpd-php52

</Location>
</IfModule>

 

discuz 附件过多导致超出数据库的修复

今天一个朋友的discuz论坛上传图片出现无法上传情况,经过chrome F12 调试发现是数据库的附件表的aid超出了MEDIUMINT(8)的允许最大值,所以适当增大就好了,下面的sql有效

ALTER TABLE  `pre_forum_attachment` CHANGE  `aid`  `aid` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT;
ALTER TABLE  `pre_forum_attachment_unused` CHANGE  `aid`  `aid` BIGINT UNSIGNED NOT NULL;
ALTER TABLE  `pre_forum_attachment_0` CHANGE  `aid`  `aid` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT;
。
。
。
ALTER TABLE  `pre_forum_attachment_9` CHANGE  `aid`  `aid` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT;

php5.3 zendguard 的一段代码备忘,来自wdcp

zendguard-php5.3

#!/bin/bash
F="ZendGuardLoader-php-5.3-linux-glibc23-i386.tar.gz"
Aurl="http://dl.wdlinux.cn:5180/soft/"
if [[ `uname -m` == "x86_64" ]];then
        F="ZendGuardLoader-php-5.3-linux-glibc23-x86_64.tar.gz"
fi
if [ ! -f $F ];then
        wget -c $Aurl/$F
fi
tar zxvf $F
[ $? != 0 ] && echo "file err" && exit
if [ ! -d /www/wdlinux/Zend/lib ];then
        mkdir -p /www/wdlinux/Zend/lib
fi
if [[ `uname -m` == "x86_64" ]];then
        cp ZendGuardLoader-php-5.3-linux-glibc23-x86_64/php-5.3.x/*.so /www/wdlinux/Zend/lib/
else
        cp ZendGuardLoader-php-5.3-linux-glibc23-i386/php-5.3.x/*.so /www/wdlinux/Zend/lib/
fi
grep '\[Zend\]' /www/wdlinux/apache_php/etc/php.ini
if [ $? != 0 -a -f /www/wdlinux/apache_php/etc/php.ini ];then
echo '[Zend]
zend_extension = /www/wdlinux/Zend/lib/ZendGuardLoader.so
zend_loader.enable = 1' >> /www/wdlinux/apache_php/etc/php.ini
fi
grep '\[Zend\]' /www/wdlinux/nginx_php/etc/php.ini
if [ $? != 0 -a -f /www/wdlinux/nginx_php/etc/php.ini ];then
echo '[Zend]
zend_extension = /www/wdlinux/Zend/lib/ZendGuardLoader.so
zend_loader.enable = 1' >> /www/wdlinux/nginx_php/etc/php.ini
fi
echo
echo "ZendGuardLoader is OK"