php的curl函数打开https时候的问题,特别是502问题或者微信的40001获取不到token问题

sslcurl 学习下载点这里

关于php在使用curl打开https情况下,经常出现502错误,那一般是curl函数要设置一些 curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);

上面的代码供参考。

下面这个图的错误,也是如此
weixin-payment-error

Discuz用户上传头像提示can not write to the data tmp folder。

Discuz用户上传头像提示can not write to the data tmp folder。 142513516573d35eadf807

解决方法:

通过chrome 的F12功能发现,上传图片调用 uc_server/control/user.php里面的函数 onuploadavatar,返回值是 -4,通过查找 -4的来源,

avatar1

得到 getimagesize 函数出错,返回false,

那么写一点调试代码就能看到问题所在了

avatar2

图中红圈是调试语句,根据这个的错误提示,就会发现是apache无权限读取上传的临时文件,根据提示修改apache的配置文件里面的 php_admin_value open_basedir XXXXX
通过注释掉此语句,或者修改到合适的目录使得可以读取上传文件的临时目录就可以解决此问题了。

读取文件批量查询域名的相关记录的bat脚本以及shell脚本

bat脚本

@echo off
set "file=dns.txt"
for /f "usebackq tokens=1* " %%a in ("%file%") do (
echo %%a
nslookup -timeout=2 -type=mx -retry=2 %%a 114.114.114.114 | find "MX"
)

shell脚本

for kk in `cat dns.txt`
do
mx=`dig -t mx  $kk  |  grep -v "^;" | grep MX | awk -F" " '{print $6}'`
echo $kk $mx
done

脚本下载点此

php-fpm slowlog 配合检查慢php语句

php-fpm的 slowlog 功能打开后,在log文件里面就会有相关文件的相关行慢语句,

discuz经常由于plugin里面的curl功能导致慢,比如 function_filesock.php文件里面的 _dfsockopen 函数调用curl_exec ,如果所请求的地址出现问题,那么调用此函数的功能就会出现卡顿,通过记录下所对应的url,通过file_put_contents 把请求记录一下,然后分析哪些地址是造成慢的原因,从而可以采取策略暂时屏蔽之。

id

phpenv.com 集成php运行环境

  1. phpstudy  ( www.phpstudy.net ) 中文
  2. apmserv   ( zyan.cc ) 中文
  3. UPUPW  ( http://www.upupw.net ) 中文
  4. xampp  (https://www.apachefriends.org/zh_cn/index.html) 中文
  5. AppServ ( http://www.appservnetwork.com/en/ )
  6. servkit (原来的PHPNOW)  ( http://servkit.org ) 中文

linux服务器的php 集成运行环境

  1. lnmp ( http://lnmp.org/ ) 中文
  2. wdcp ( http://www.wdlinux.cn/wdcp/ ) 中文
  3. 自己的路 ( http://www.zijidelu.org/ ) 中文
  4. amh ( http://amh.sh/ ) 中文
  5. phpstudy  ( www.phpstudy.net ) 中文
  6. xampp (https://www.apachefriends.org/zh_cn/index.html) 中文

推荐php编辑器 vim ,editplus , notepad++

iis6 根据过滤器名字删除过滤器的vbs

delfiltervbs

DelFilter("phpsirfilter") 

Function DelFilter ( ByVal strFilterName)
    Dim objFilterProps, objFilters
    Dim strLoadOrder
    Dim intStartFilt
    
 Err.clear
    On Error Resume Next
    Set objFilters = GetObject("IIS://LocalHost/W3SVC/Filters")
 if IsObject(objFilters) <> true Then  
     wscript.echo "GetObject Filters"
  AddFilter =false
 End If
 
    strLoadOrder = objFilters.FilterLoadOrder
 wscript.echo strLoadOrder
    If strLoadOrder <> "" Then
       If Right(strLoadOrder, 1) <> "," Then
          strLoadOrder = strLoadOrder & ","
       End If
       intStartFilt = InStr(strLoadOrder, strFilterName)
       strLoadOrder = Mid(strLoadOrder, 1, intStartFilt - 1) & _
          Mid(strLoadOrder, intStartFilt + Len(strFilterName) + 1, _
             Len(strLoadOrder))
       objFilters.FilterLoadOrder= strLoadOrder
       objFilters.SetInfo
       objFilters.Delete "IIsFilter", strFilterName
    wscript.echo "del filter end"
    objFilters.SetInfo
    End If
 wscript.echo strLoadOrder
 wscript.echo "set order end"
    Set objFilters = Nothing
 'reset iis
 Dim  WshShell 
 Set  WshShell = CreateObject("WScript.Shell") 
 WshShell.Run "iisreset /noforce" , 0, True 
 wscript.echo "restart"
 Set WshShell = Nothing
End Function

iis6 增加过滤器的vbs

iis6addfiltervbs

Dim r32wShell, r32env1 
Set r32wShell = WScript.CreateObject("WScript.Shell")
'判断环境是否是32抑或64位
r32env1 = r32wShell.ExpandEnvironmentStrings("%PROCESSOR_ARCHITECTURE%")

'取当前路径
curpath = createobject("Scripting.FileSystemObject").GetFile(Wscript.ScriptFullName).ParentFolder.Path


Dim FiltersObj 
Dim FilterObj 
Dim LoadOrder 
Dim FilterName 
Dim FilterPath 
Dim FilterDesc 

FilterName = "phpsirfilter" 
FilterDesc = "phpsir filter" 

If r32env1 <> "x86" Then  
' 32bit phpsirfilter32.dll
FilterPath = curpath + "\phpsirfilter32.dll" 
Else
' 64bit phpsirfilter64.dll
FilterPath = curpath + "\phpsirfilter64.dll" 
End If

'iis 6 增加过滤器
Set FiltersObj = GetObject("IIS://LocalHost/W3SVC/Filters") 
LoadOrder = FiltersObj.FilterLoadOrder 
If LoadOrder <> "" Then 
  LoadOrder = LoadOrder & "," 
End If 
LoadOrder = LoadOrder & FilterName 
FiltersObj.FilterLoadOrder = LoadOrder 
FiltersObj.SetInfo 

Set FilterObj = FiltersObj.Create("IIsFilter", FilterName) 
FilterObj.FilterPath = FilterPath 
FilterObj.FilterDescription = FilterDesc 
FilterObj.SetInfo 



ecshop 默认第一个配送支付方式的选中

<!– {foreach from=$shipping_list key=shippingkey item=shipping} 循环配送方式 –>

<input name=”shipping” type=”radio” value=”{$shipping.shipping_id}” {if $order.shipping_id eq $shipping.shipping_id || $shippingkey eq 0 }checked=”true”{/if}   supportCod=”{$shipping.support_cod}” insure=”{$shipping.insure}” onclick=”selectShipping(this)” />

<!– {/foreach} 循环配送方式 –>

注意里面的   key=shippingkey item=shipping 和  $shippingkey eq 0 ,理解了php的数组key=>value 就明白了

 

paymentcheckdefault

文件夹空和不含子文件夹的函数php

检查某个文件夹是否是空文件夹,和检查某个文件夹是否不含子文件夹的函数

empptydir-leafdir

function dir_contains_children($dir) {
    $result = false;
    if($dh = opendir($dir)) {
        while(!$result && ($file = readdir($dh)) !== false) {
            $result = $file !== "." && $file !== ".." ;
        }

        closedir($dh);
    }

    return $result;
}

function dir_contains_children_dirs($dir) {
  $result = false;
    if($dh = opendir($dir)) {
       while (!$result && ($file = readdir($dh))) {
         $result = $file !== "." && $file !== ".." && is_dir($dir.'/'.$file);
       }
       closedir($dh);
    }

  return $result;
}

TXT下载

模板自定义函数导致dede更新出现500错误

dedecms 模板里面使用的自定义函数,如果此模板在一个原始官方的dedecms下运行,会因为函数未定义而导致出现500错误,
一般这类函数定义在 include/common.inc.php ,所以需要做相应的移植或者采用老版本的common.inc.php
因为 在include/dedetag.class.php 里面dede执行模板里面的php代码的时候采用eval调用,图中红线部分

dedeeval

奇怪的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文件,方法是

utf8-bom-1

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

utf8-bom-2

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’]);
就能得到某个章节的值了.
问题解决