当前位置:  编程技术>php
本页文章导读:
    ▪nginx+php-fpm页面显示空白的解决方法      然后,开启nginx和php的日志,但在日志里也没有发现有价值的错误。 继续尝试更改php的日志,依然无果。 最后发现是nginx的配置文件里面少写了一条配置信息: fastcgi_param SCRIPT_FILENAME $document_.........
    ▪参考discuz的passpor写的php加密解密处理类      参考discuz的passpor写的php加密解密处理类,有需要的朋友可以参考下。 代码如下: <?php /*--------------------------------------- = 版权协议: = GPL (The GNU GENERAL PUBLIC LICENSE Version 2, June 1991) =-----------.........
    ▪php中的Unserialize与Autoload      有关php中Unserialize与Autoload之间的关系,你知道吗?举个例子,假设我们可以拿到第三方的序列化数据,但没有相应的类定义:   代码如下: <?php $string = 'O:6:“Foobar”:2:{s:3:“foo.........

[1]nginx+php-fpm页面显示空白的解决方法
    来源: 互联网  发布时间: 2013-12-24

然后,开启nginx和php的日志,但在日志里也没有发现有价值的错误。
继续尝试更改php的日志,依然无果。

最后发现是nginx的配置文件里面少写了一条配置信息:
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;

未配置以上信息时,会导致nginx没有发送要解析的php文件地址给phpfpm,所以页面一直是空白的,也没有解析的错误信息。

您可能感兴趣的文章:
有关nginx+php-fpm配置文件的组织结构
nginx下fastcgi_param运行php出现空白页的问题
nginx下跑php的程序,返回200,但是空白页


    
[2]参考discuz的passpor写的php加密解密处理类
    来源: 互联网  发布时间: 2013-12-24

参考discuz的passpor写的php加密解密处理类,有需要的朋友可以参考下。

代码如下:
<?php
/*---------------------------------------
= 版权协议:
= GPL (The GNU GENERAL PUBLIC LICENSE Version 2, June 1991)
=------------------------------------------------------------
= 文件名称:cls.sys_crypt.php
= 摘    要:php加密解密处理类
= 版    本:1.0
= 参    考:Discuz论坛的passport相关函数
=------------------------------------------------------------
= Script Written By PHPWMS项目组
= 最后更新:xinge
= 最后日期:2007-12-09
---------------------------------------=*/
 
class SysCrypt {
private $crypt_key;
 
// 构造函数
public function __construct($crypt_key) {
   $this -> crypt_key = $crypt_key;
}
 
public function php_encrypt($txt) {
   srand((double)microtime() * 1000000);
   $encrypt_key = md5(rand(0,32000));
   $ctr = 0;
   $tmp = '';
   for($i = 0;$i<strlen($txt);$i++) {
      $ctr = $ctr == strlen($encrypt_key) ? 0 : $ctr;
      $tmp .= $encrypt_key[$ctr].($txt[$i]^$encrypt_key[$ctr++]);
   }
   return base64_encode(self::__key($tmp,$this -> crypt_key));
}
 
public function php_decrypt($txt) {
   $txt = self::__key(base64_decode($txt),$this -> crypt_key);
   $tmp = '';
   for($i = 0;$i < strlen($txt); $i++) {
      $md5 = $txt[$i];
      $tmp .= $txt[++$i] ^ $md5;
   }
   return $tmp;
}
 
private function __key($txt,$encrypt_key) {
   $encrypt_key = md5($encrypt_key);
   $ctr = 0;
   $tmp = '';
   for($i = 0; $i < strlen($txt); $i++) {
      $ctr = $ctr == strlen($encrypt_key) ? 0 : $ctr;
      $tmp .= $txt[$i] ^ $encrypt_key[$ctr++];
   }
   return $tmp;
}
 
public function __destruct() {
   $this -> crypt_key = null;
}
}
 
#--调用示例
$sc = new SysCrypt('phpwms');
$text = '110';
print($sc -> php_encrypt($text));
print('<br>');
print($sc -> php_decrypt($sc -> php_encrypt($text)));
?>

    
[3]php中的Unserialize与Autoload
    来源: 互联网  发布时间: 2013-12-24

有关php中Unserialize与Autoload之间的关系,你知道吗?举个例子,假设我们可以拿到第三方的序列化数据,但没有相应的类定义:
 

代码如下:

<?php
$string = 'O:6:“Foobar”:2:{s:3:“foo”;s:1:“1”;s:3:“bar”;s:1:“2”;}';
$result = unserialize($string);
var_dump($result);

/*
object(__PHP_Incomplete_Class)[1]
public '__PHP_Incomplete_Class_Name' => string 'Foobar' (length=6)
public 'foo' => string '1' (length=1)
public 'bar' => string '2' (length=1)
*/
?>
 

当反序列化一个对象时,如果对象的类定义不存在,那么PHP会引入一个未完成类的概念,即:__PHP_Incomplete_Class,此时虽然我们反序列化成功了,但还是无法访问对象中的数据,否则会出现如下报错信息:
The script tried to execute a method or access a property of an incomplete object. Please ensure that the class definition of the object you are trying to operate on was loaded _before_ unserialize() gets called or provide a __autoload() function to load the class definition.

这不是什么难事儿,只要做一次强制类型转换,变成数组就可以了:
 

代码如下:

<?php
$string = 'O:6:“Foobar”:2:{s:3:“foo”;s:1:“1”;s:3:“bar”;s:1:“2”;}';
$result = (array)unserialize($string);
var_dump($result);

/*
array
'__PHP_Incomplete_Class_Name' => string 'Foobar' (length=6)
'foo' => string '1' (length=1)
'bar' => string '2' (length=1)
*/
?>

不过如果系统激活了Autoload,情况会变得复杂些。顺便插句话:PHP其实提供了一个名为unserialize_callback_func配置选项,但意思和autoload差不多,这里就不介绍了,咱们就说autoload,例子如下:
 

代码如下:
<?php
spl_autoload_register(function($name) {
var_dump($name);
});
$string = 'O:6:“Foobar”:2:{s:3:“foo”;s:1:“1”;s:3:“bar”;s:1:“2”;}';
$result = (array)unserialize($string);
var_dump($result);
?>
 

执行上面代码会发现,spl_autoload_register被触发了,多数时候这是有意义的,但如果遇到一个定义不当的spl_autoload_register,就悲催了,比如说下面这段代码:
 

代码如下:
<?php
spl_autoload_register(function($name) {
include “/path/to/{$name}.php”;
});
$string = 'O:6:“Foobar”:2:{s:3:“foo”;s:1:“1”;s:3:“bar”;s:1:“2”;}';
$result = (array)unserialize($string);
var_dump($result);
?>

毫无疑问,因为找不到类定义文件,所以报错 了!改改spl_autoload_register肯定行,但前提是你能改,如果涉及第三方代码,我们就不能擅自做主了,此时我们需要一种方法让 unserialize能绕开autoload,最简单的方法是把我们需要的类FAKE出来:
 

代码如下:
<?php
spl_autoload_register(function($name) {
include “/path/to/{$name}.php”;
});
class Foobar {} // Oh, Shit!
$string = 'O:6:“Foobar”:2:{s:3:“foo”;s:1:“1”;s:3:“bar”;s:1:“2”;}';
$result = (array)unserialize($string);
var_dump($result);
?>
 

不得不说,上面的代码真的很垃圾。为大家提供一人我写的:
 

代码如下:

<?php
spl_autoload_register(function($name) {
include “/path/to/{$name}.php”;
});

$string = 'O:6:“Foobar”:2:{s:3:“foo”;s:1:“1”;s:3:“bar”;s:1:“2”;}';
$functions = spl_autoload_functions();
foreach ($functions as $function) {
   spl_autoload_unregister($function);
}

$result = (array)unserialize($string);

foreach ($functions as $function) {
   spl_autoload_register($function);
}
var_dump($result);
?>
 

代码虽然多了点,但至少没有FAKE类,看上是不是舒服多了。


    
最新技术文章:
▪PHP函数microtime()时间戳的定义与用法
▪PHP单一入口之apache配置内容
▪PHP数组排序方法总结(收藏)
▪php数组排序方法大全(脚本学堂整理奉献)
▪php数组排序的几个函数(附实例)
▪php二维数组排序(实例)
▪php根据键值对二维数组排序的小例子
▪php验证码(附截图)
▪php数组长度的获取方法(三个实例)
▪php获取数组长度的方法举例
▪判断php数组维度(php数组长度)的方法
▪php获取图片的exif信息的示例代码
▪PHP 数组key长度对性能的影响实例分析
▪php函数指定默认值的方法示例
▪php提交表单到当前页面、提交表单后页面重定...
▪php四舍五入的三种实现方法
▪php获得数组长度(元素个数)的方法
▪php日期函数的简单示例代码
▪php数学函数的简单示例代码
▪php字符串函数的简单示例代码
▪php文件下载代码(多浏览器兼容、支持中文文...
▪php实现文件下载、支持中文文件名的示例代码...
▪php文件下载(防止中文文件名乱码)的示例代码
▪解决PHP文件下载时中文文件名乱码的问题
▪php数组去重(一维、二维数组去重)的简单示例
▪php小数点后取两位的三种实现方法
IT科技资讯 iis7站长之家
▪PHP导出excel时数字变为科学计数的解决方法
▪PHP数组根据值获取Key的简单示例
▪php数组去重的函数代码示例
 


站内导航:


特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

©2012-2021,