设为首页 收藏本站
查看: 881|回复: 0

[经验分享] PHP总结 原创-胡志广

[复制链接]

尚未签到

发表于 2017-3-28 11:08:11 | 显示全部楼层 |阅读模式
1.   Extract函数用法
如:
<?php
/* 假定 $var_array  wddx_deserialize 返回的数组*/
$size = “large”;
$var_array = array(”color” => “blue”,
size” => “medium”,
shape” => “sphere”);
extract($var_array, EXTR_PREFIX_SAME, “wddx”);
echo “$color, $size, $shape, $wddx_size\n”;
?>
 
上例将输出: 

blue, large, sphere, medium 

 
$size 没有被覆盖,因为指定了 EXTR_PREFIX_SAME,这使得 $wddx_size 被建立。如果指定了 EXTR_SKIP,则$wddx_size 也不会被建立。EXTR_OVERWRITE 将使 $size 的值为“medium”EXTR_PREFIX_ALL 将建立新变量$wddx_color$wddx_size  $wddx_shape 
 
如果不指定EXTR_PREFIX_SAME,那么则最新通过extract拆解的size将替换之前的变量,如:
 <?php$a = 'Original';$my_array = array("a" => "Cat","b" => "Dog", "c" => "Horse");extract($my_array);echo "\$a = $a; \$b = $b; \$c = $c";?>输出:
$a = Cat; $b = Dog; $c = Horse
 
 
2.   Require错误
Warning: require(service/service.php) [function.require]: failed to open stream: No such file or directory in D:\php_project\recommand\view\recommand_goods.phpon line 2

Fatal error: require() [
function.require]: Failed opening required 'service/service.php' (include_path='.;C:\php5\pear') inD:\php_project\recommand\view\recommand_goods.php on line 

 
这是由于require相对路径引起找不到文件的,改为绝对路径,或者能够让其找到文件的相对路径也可以
 
3.   Php 全局变量函数内引用
php中声明了全局变量,然后再函数中引用,首先用global
去声明全局变量后,然后再函数内调用即可,例:
<?php
 
$product_url="http://xxxxx/product/";
function generate_current_goods($current_goods){
    global $product_url,$aaa;
    echo $product_url;
}
 
4.   Php array key value 用法
$test=array();
//写值
$test[“a”]=”aa”;
//取值
echo $test[“a”];
 
5.   php redis
$redis=new Redis();
    $redis->connect('127.0.0.1', 6379);
    //keyredis key 获取redis的字符串信息
    $redis->get(key);
    //获取hash
$goods_array=$redis->hGetAll(key);
//goods_arrayredis中获取一个array,然后获取其key
echo $goods_array[key];
 
注:
如果为hash方式通过字符串获取会出问题,会报key值不存在,这点需要注意
 
6.   Php 格式化数字
Php 格式化数字
echo number_format("1000000",2);

 
约束该数字后小数点2
 
7.   Php 判断array 是否存在
Php判断array 是否存在用null判断
If($a == NULL)
echo “test”
 
 
8.   php读数据库乱码解决方法
iconv('GB2312','UTF-8',$data)
 
 
9.  php redis hMset设置array缓存注意事项
$goods=array("wid"=>$goods_id,"wname"=>$row["Wname"],"wimageurl"=>$row["ImageUrl"],"wmaprice"=>$row["WMaprice"],"goods_current_price"=>$goods_current_price);
  $redis->hMset("d_$goods_id", $goods) ;
 
Redis如果要用redis hMset注入array缓存,那么需要用array(“xx”=>xxx)这样的方式,不能用
$a=array();
$a[‘a’]=”aa”;
这样的方式
 
10.         Php redis不能r_xxKey
Redis不能用r_xxxkey ,r_可能是redis的关键字
 
 
11.         安装php iconv错误解决方法
Make php 时报出如下错误:
ext/iconv/.libs/iconv.o(.text+0x1738): In function `zif_iconv_mime_encode':
/home/jjdai/work/zhupiter/php-5.2.0/ext/iconv/iconv.c:1017: undefined reference to `libiconv_open'
ext/iconv/.libs/iconv.o(.text+0x1756):/home/jjdai/work/zhupiter/php-5.2.0/ext/iconv/iconv.c:1031: undefined reference to `libiconv_open'
ext/iconv/.libs/iconv.o(.text+0x1993):/home/jjdai/work/zhupiter/php-5.2.0/ext/iconv/iconv.c:1290: undefined reference to `libiconv_close'
ext/iconv/.libs/iconv.o(.text+0x19ad):/home/jjdai/work/zhupiter/php-5.2.0/ext/iconv/iconv.c:1293: undefined reference to `libiconv_close'
ext/iconv/.libs/iconv.o(.text+0x1b01):/home/jjdai/work/zhupiter/php-5.2.0/ext/iconv/iconv.c:1102: undefined reference to `libiconv'
ext/iconv/.libs/iconv.o(.text+0x1b33):/home/jjdai/work/zhupiter/php-5.2.0/ext/iconv/iconv.c:1134: undefined reference to `libiconv'
ext/iconv/.libs/iconv.o(.text+0x1b5e):/home/jjdai/work/zhupiter/php-5.2.0/ext/iconv/iconv.c:1150: undefined reference to `libiconv'
ext/iconv/.libs/iconv.o(.text+0x1e10):/home/jjdai/work/zhupiter/php-5.2.0/ext/iconv/iconv.c:1202: undefined reference to `libiconv'
ext/iconv/.libs/iconv.o(.text+0x1e3c):/home/jjdai/work/zhupiter/php-5.2.0/ext/iconv/iconv.c:1233: undefined reference to `libiconv'
ext/iconv/.libs/iconv.o(.text+0x207f):/home/jjdai/work/zhupiter/php-5.2.0/ext/iconv/iconv.c:1277: more undefined references to `libiconv' follow

 
解决方法:
#wget http://ftp.gnu.org/pub/gnu/libiconv/libiconv-1.13.1.tar.gz
#tar -zxvf libiconv-1.13.1.tar.gz
#cd libiconv-1.13.1
# ./configure --prefix=/usr/local/libiconv
# make
# make install

 
然后将php configure --with-iconv=/usr/local/libicon配置上iconv路径就可以了
 
12.         Php实现iterator
class myIterator implements Iterator
{
    //索引游标
    private $position = 0;
    private $array = array(
        "1个元素",
        "2个元素",
        "最后1个元素",
    );
 
    public function __construct()
    {
        $this->position = 0;
    }
 
    function rewind()
    {
        echo "调用rewind方法\n";
        $this->position = 0;
    }
 
    function current()
    {
        echo "调用current方法\n";
        return $this->array[$this->position];
    }
 
    function key()
    {
        echo "调用key方法\n";
        return $this->position;
    }
 
    function next()
    {
        echo "调用next方法\n";
        ++$this->position;
    }
 
    function valid()
    {
        echo "调用valid方法\n";
        return isset($this->array[$this->position]);
    }
}
 
$it = new myIterator;
$times = 0;
foreach ($it as $key => $value) {
    $times ++;
    echo "键名:{$key}  值:{$value}\n";
    echo "----------{$times}遍历完成--------->\n";
}
执行结果:
调用rewind方法
调用valid方法
调用current方法
调用key方法
键名:值:第1个元素
----------1遍历完成--------->
调用next方法
调用valid方法
调用current方法
调用key方法
键名:值:第2个元素
----------2遍历完成--------->
调用next方法
调用valid方法
调用current方法
调用key方法
键名:值:最后1个元素
----------3遍历完成--------->
调用next方法
调用valid方法

 
 
Iterator调用顺序:
首次调用:
调用rewind方法
调用valid方法

如果为空则不继续调用,如果不为空继续调用
调用current方法
调用key方法

调用next方法
调用valid方法

 
 
13.         安装phpmysql错误
checking for mysql_close in -lmysqlclient... no
checking for mysql_error in -lmysqlclient... no
configure: error: mysql configure failed. Please check config.log for more information
这是因为在./configure
'--with-mysql=/export/tools/mysql-5.1.54-linux-x86_64-glibc23'这种写法是错误的,
'--with-mysql-dir=/export/tools/mysql-5.1.54-linux-x86_64-glibc23'
需要用这种写法--with-mysql-dir切记
 
 
14.         Php 编译错误lltdl错误解决方法
/usr/bin/ld: cannot find -lltdl
collect2: ld returned 1 exit status
make: *** [sapi/fpm/php-fpm] Error 1
 如果报了上述错误,那么进入到xxx/libmcrypt-2.5.8/libltdl
然后执行
./configure -enable-ltdl-install
make

Make install
然后再编译php就没有问题了
 
 
15.         Gd2总结
imagesx ( $img ) 获取图像宽度
imagesy ( $img ) 获取图像高度
 
 
2个函数需要联合使用
imagealphablending ( $img, false );
imagesavealpha ( $img, true );
16.         Parse error: syntax error, unexpected T_CONSTANT_ENCAPSED_STRING in /export/data/www/xxxx/web/test_gd2_1.php on line 2
php报这个错误时:
Parse error: syntax error, unexpected T_CONSTANT_ENCAPSED_STRING in /export/data/www/xxxx/web/test_gd2_1.php on line 2
说明第二行有语法问题
 
 
17.         iconv_substr函数
iconv_substr函数utf-8不支持中文,gbk支持中文
 
18.         正则/x7f-/xff
[a-zA-Z_/x7f-/xff]
上面表示是字母、下划线、和127-255之间的特殊字符
/x16进制
/x7f-/xff对应的就是ascii 码表的127-255的特殊字符
 
 
19.         Php 可选参数
 
<?php
   function test($a,$b="2",$c="3"){
        echo $a."|".$b."|".$c;
   }
 
   test("1");
?>
 
如果要用php 可选参数,需要在函数后面加入初值
 
20.         Fatal error: Cannot access empty property 解决方法
当抛出这个额问题时:
Fatal error: Cannot access empty property in /export/data/www/test/read_source/infertype_test.php on line 7
 
查找到第7
echo $c_test->$a."\n";
 
完全代码:
    class Test{
        public $a=11;
        static $b=2;
    }
$c_test=new Test();
         echo $c_test->a."\n";
 
这里调用
$c_test->$a,所以会出错误,把$去掉即可如:echo $c_test->a."\n";(红色为正确的)
 
21.         Redis 扩展和使用方法
Redis 扩展安装方法:
首先解压phpredis.tar.gz
$PHP_HOME:php安装目录如:/expert/servers/ php-5.3.5
 
在解压后的phpredis目录下执行:
$PHP_HOME/bin/phpize
生成redis 扩展的configure文件
 
然后执行
./configure --enable-redis --with-php-config=$PHP_HOME/bin/php-config
执行该命令后,生成redis 的扩展在php安装目录下,如:
$PHP_HOME /lib/php/extensions/no-debug-non-zts-20090626/redis.so
生成好redis.so后,在$PHP_HOME/etc/php.ini 下添加
extension=redis.so
这样redis扩展就添加到php中了
 
Redis php 使用方法:
http://www.cnblogs.com/weafer/archive/2011/09/21/2184059.html
http://seared2008.blog.iyunv.com/2786540/841332
 
 
22.         解决phpIt is not safe to rely on the system's timezone settings… 
解决办法,在php.ini里加上
date.timezone = "Asia/Shanghai"

详细参见:
http://www.iyunv.com/os/201210/158970.html
 
23.         soap demo no-wsdl
一、服务端-soapserver.php
 
<?php  
function add($a, $b) 

    return $a+$b; 

function test($str) 

    return $str; 

$server = new SoapServer(null, array('uri' => 'http://localhost/')); 
//$server->addFunction("add"); 
//$server->addFunction("test"); 
$server->addFunction(array('add', 'test')); 
$server->addFunction(SOAP_FUNCTIONS_ALL); 
$server->handle(); 
?> 
 
 
 
 
二、客户端-soapclient.php
 
<?php  
$arr_options = array('uri' => 'http://localhost/', 'location' => 'http://localhost/myprojects/soapserver.php', 'trace' => true); 
$soap = new SoapClient(null, $arr_options); 
echo $soap->add(20, 30);  
echo $soap->test('caleng'); 
 
参照:
http://blog.csdn.net/caleng/article/details/5427048
 
24.         Fatal error: Call to undefined function getName()错误解决方法
Fatal error: Call to undefined function getName() in /export/data/www/test/test_ext/soap/test_wsdl_class_client.php on line 9
造成这样的问题,有这么几种:
1.       getName()本身不存在,所以调用出错
2.       getName()存在,但是调用方式出了问题,如:$a->getName()正确,但是却写成了$a.getName()或者中间的调用出现了其他的错误,所以需要检查,正确的为->
 
 
25.         eclise 设计wsdl
File->other->web service
DSC0000.jpg
然后选择wsdl ,点击next
DSC0001.jpg
选择存放位置和名称,点击next
DSC0002.jpg
Target namespaceweb service uri,这里需要填写好;
然后点击finish
创建后生成如下内容:
DSC0003.jpg
1:这里是完整的web service的地址,如:
http://192.168.12.63:8082/soap/test_wsdl_server.php
2:这里的add是方法,input的是传入的参数;output是返回值;然后左边的是名称,右侧是类型


绘制内容:
1.       添加service
右键空白处,点击add service,service 相当于类
DSC0004.jpg
Service样式:
DSC0005.jpg
2.       添加binding
右键空白处,点击add Binding
DSC0006.jpg
点击后生成
DSC0007.jpg
生成binding operation代码,右键binding ,然后点击Generate Binding Content则生成bingding中的operation的代码:
DSC0008.jpg
生成代码如:
<soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
<wsdl:operation name="add">
<soap:operation soapAction="http://192.168.12.63:8082/soap/add"/>
<wsdl:input>
<soap:body use="literal"/>
</wsdl:input>
<wsdl:output>
<soap:body use="literal"/>
</wsdl:output>
</wsdl:operation>
……..
</wsdl:binding>
当创建新的operation需要生成operation才可以创建
3.       添加porttype
右键空白处,选择Add porttype
DSC0009.jpg
然后生成portType,如:
DSC00010.jpg
这就是一个portType,一个portType 相当于一个方法集合
4.       添加operation
Operation相当于函数或者方法,右键
DSC00011.jpg

5.       添加part
DSC00012.jpg
一个part相当于一个参数或者变量,可以定义参数的名称和返回的类型
右键一个portType
DSC00013.jpg
6.       添加fault
右键一个portType
DSC00014.jpg
点击add fault
7.       添加和设置message
右键一个portType
DSC00015.jpg
一个message相当于inputoutput这样的,点击set message可以进行new message和选择exsiting message
 
 
代码结构:
<?xml version="1.0" encoding="UTF-8"?>
<wsdl:definitions xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:tns="http://192.168.12.63:8082/soap/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" name="test" targetNamespace="http://192.168.12.63:8082/soap/">
<wsdl:types>
<xsd:schema targetNamespace="http://192.168.12.63:8082/soap/">
<xsd:element name="add">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="in" type="xsd:string"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element name="addResponse">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="out" type="xsd:string"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:schema>
</wsdl:types>
<!—这里的message的名字可以设定,这里的message相当于inputoutput,其中包括了参数和其返回值-->
<wsdl:message name="addRequest">
<!—part 就是参数,name是参数名称 type是类型,一个message中可以包含多个part-- >
<wsdl:part name="a" type="xsd:int"/>
        <wsdl:part name="b" type="xsd:int"></wsdl:part>
</wsdl:message>
<wsdl:message name="addResponse">
<wsdl:part name="returnadd" type="xsd:int"/>
</wsdl:message>
   
    <wsdl:message name="test_input1">
    <wsdl:part name="str" type="xsd:string"></wsdl:part>
    </wsdl:message>
    <wsdl:message name="test_out_1">
    <wsdl:part name="returnstr" type="xsd:string"></wsdl:part>
    </wsdl:message>
    <!—这个是portType的标识-->
    <wsdl:portType name="test">
<!—这里是operation的声明块,名字是方法名称,然后其中的input是输入,也就是传入的参数,message是上面声明好的message,然后output是返回值,引用上面声明好的message-->
<wsdl:operation name="add">
<wsdl:input message="tns:addRequest"/>
<wsdl:output message="tns:addResponse"/>
</wsdl:operation>
 
 
 
 
        <wsdl:operation name="test">
        <wsdl:input message="tns:test_input1"></wsdl:input>
        <wsdl:output message="tns:test_out_1"></wsdl:output>
        </wsdl:operation>
    </wsdl:portType>
<!—这里声明的是binding的内容 typeportType-- > 
    <wsdl:binding name="testSOAP" type="tns:test">
<soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
<!—这里是binding中的方法(operation -- >
<wsdl:operation name="add">
<soap:operation soapAction="http://192.168.12.63:8082/soap/add"/>
<wsdl:input>
<soap:body use="literal"/>
</wsdl:input>
<wsdl:output>
<soap:body use="literal"/>
</wsdl:output>
</wsdl:operation>
<wsdl:operation name="test">
<soap:operation soapAction="http://192.168.12.63:8082/soap/test"/>
<wsdl:input>
<soap:body use="literal"/>
</wsdl:input>
<wsdl:output>
<soap:body use="literal"/>
</wsdl:output>
</wsdl:operation>
</wsdl:binding>
<!—这里定义的是service 的内容-->
<wsdl:service name="test">
<wsdl:port binding="tns:testSOAP" name="testSOAP">
<soap:address location="http://192.168.12.63:8082/soap/test_wsdl_server.php"/>
</wsdl:port>
</wsdl:service>
</wsdl:definitions>
 
 
26.         Soap demo wsdl 模式
Function soap实现:
Server:
<?php
//wsdl不缓存
ini_set("soap.wsdl_cache_enabled", "0");
//实现方法
function add($a, $b)
{
        return $a+$b;
}
function test($str)
{
        return $str;
}
//加载模板
$server = new SoapServer('test.wsdl');
//将函数添加到server
$server->addFunction(array('add', 'test'));
//添加handle
$server->handle();
//遍历server中的方法进行读取
$functions = $server->getFunctions();
foreach($functions as $func) {
        echo $func . "\n";
}
 
?>
Client:
<?php
ini_set("soap.wsdl_cache_enabled", "0");
//创建soapClient对象,加载wsdl
$soap = new SoapClient('http://192.168.12.63:8082/soap/test.wsdl');
//读取soap中的存在的方法
print_r($soap->__getFunctions());
//调用方法
echo $soap->add(13,22);
echo $soap->test("aaa");
 ?>
 
Soap类实现:
Server:
<?php
ini_set("soap.wsdl_cache_enabled", "0");
    class test_class{
        function getName($name){
            return $name;
        }
        function __construct()
          {
                echo "aaaaaaaaaaaaa";
          }
    }
$server = new SoapServer('test_class.wsdl');
//function的区别就在于,声明好的类,这里设置上类名即可
$server->setClass("test_class");
$server->handle();
$functions = $server->getFunctions();
foreach($functions as $func) {
        echo $func . "\n";
}
 
?>
 
Client:
<?php
ini_set("soap.wsdl_cache_enabled", "0");
$soap = new SoapClient('http://192.168.12.63:8082/soap/test_class.wsdl');
 
 print_r($soap->__getFunctions());
/*server中的类的函数直接加载进来了,一般来说soap中的一个wsdl就是一个类的概念
所以这里创建client后,然后直接调用方法即可
*/
echo $soap->getName("testName");
 ?>
 
 
27.         设置wsdl缓存
ini_set("soap.wsdl_cache_enabled", "0");
 
 
28.         phpinfo 无法显示问题解决  
配置php.ini文件
disable_functions = passthru, exec, phpinfo, system, ini_alter, readlink, symlink, leak, proc_open, popepassthru, chroot, scandir, chgrp, chown, escapeshellcmd, escapeshellarg, shell_exec, proc_get_status


这一句中去掉phpinfo

去掉phpinfo后就可以显示phpinfo

 
29.         call_user_func_array()
例子:
<?php
function foobar($arg, $arg2) {
    echo __FUNCTION__, " got $arg and $arg2\n";
}
class foo {
    function bar($arg, $arg2) {
        echo __METHOD__, " got $arg and $arg2\n";
    }
}
 
 
// Call the foobar() function with 2 arguments
call_user_func_array("foobar", array("one", "two"));
 
// Call the $foo->bar() method with 2 arguments
$foo = new foo;
call_user_func_array(array($foo, "bar"), array("three", "four"));
?>
call_user_func_array详解
第一参数是函数名或array(对象,方法)
第二个参数是参数集合
 
30.         安装mssql 扩展
./configure  --with-php-config=/export/servers/php-5.3.5/bin/php-config --with-mssql=/export/servers/freetds
然后make –j 16
报了如下错误:
In file included from /export/software/php/php-5.3.5/ext/mssql/php_mssql.c:33:
/export/software/php/php-5.3.5/ext/mssql/php_mssql.h:67: error: redefinition of typedef 'LPBYTE'
/export/servers/freetds/include/sqlfront.h:35: note: previous declaration of 'LPBYTE' was here
/export/software/php/php-5.3.5/ext/mssql/php_mssql.c: In function 'php_mssql_do_connect':
/export/software/php/php-5.3.5/ext/mssql/php_mssql.c:760: warning: cast from pointer to integer of different size
/export/software/php/php-5.3.5/ext/mssql/php_mssql.c: In function 'php_mssql_get_column_content_without_type':
/export/software/php/php-5.3.5/ext/mssql/php_mssql.c:1113: warning: passing argument 1 of 'spprintf' from incompatible pointer type
/export/servers/php-5.3.5/include/php/main/spprintf.h:40: note: expected 'char **' but argument is of type 'unsigned char **'


Php 扩展和freetds都定义了LPBYTE类型
Freetds是在sqlfront.h:35定义的
Php_ext是在php_mssql.h:67定义的
所以php_ext中重复定义了
我们注释掉php_mssql.h:67行的LPBYTE类型即可
然后再编译就没有问题了
Make
Make install
编译完成后,我们在php.ini中加入mssql.so即可
 
31.         获取的php不加转义符
magic_quotes_gpc=Off
magic_quotes_runtime=Off
magic_quotes_sybase=Off
 
php.ini中配置,如果不配置,会出现转义符/
 
 
32.         Php 关闭安全模式
php报了如下错误时:
Warning: require() [function.require]: SAFE MODE Restriction in effect. The script whose uid is 502 is not allowed to access /export/data/www/club_ice_lib/Ice.php owned by uid 506 in/export/data/www/test/thinkphp_test/ThinkPHP_3.0_Full/Examples/Hello/Lib/Action/IndexAction.class.php on line 10
 
Php 默认开启安全模式
php.ini中将
safe_mode = Off
设置为关闭,重启即可
或者给提示无法访问的目录分配用户权限也可以
 
33.         Unset销毁对象
Php中的unset函数是用于销毁对象的;
例:
$a=new A();
Unset($a);
 
$a=null;
也会销毁对象
也就是销毁对象有2种:nullunset
 
34.         Php文件操作
$f1=fopen("logs/test_file.log","a");
if(!$f1){
        echo "file don't exists";
        exit;
}
fwrite($f1,"test!");
fclose($f1);
 
参考:
http://blog.sina.com.cn/s/blog_55f6ef710100l3jl.html
 
35.         获取引用的所有文件
print_r(get_included_files());
 
 
36.         create_function 用法(匿名函数)
$newfunc = create_function('$a,$b,$c', 'return $a.$b.$c;');
echo "New anonymous function: $newfunc\n";
echo $newfunc(2, 3,"aaa") . "\n";
 
 
create_function(传入参数,执行代码)
 
传入参数如:
$a,$b,$c,这个就是类似function a($a,$b,$c)
执行代码:
'return $a.$b.$c;',这里也可以任意写为’echo aaa;’
 
然后创建好匿名函数后,赋值给$newfunc
在下面通过$newfunc(2,3,”aaa”)这样调用,括号内是传入参数,有别于普通的函数普通函数前不需要加$,这里执行的匿名函数是赋值给了 一个变量,这里需要注意


 
create_function 伪造主函数内容
 
create_function实现过程:
<?php
function __lambda_func(替换参数位置){
         替换语句位置
}
 
 
如果create_function 如下实现:
create_function('', '} echo "hi"; if (0) {');
 
参数为空:
那么替换参数位置不需要替换;
然后替换语句位置替换为:} echo "hi"; if (0) {
最终拼接后的语句为:
 
<?php
 
function __lambda_func(){
 
}
 
echo "hi";
 
if(0){
 
}
 
这样其实echo “hi”;就形成了一个伪造主函数;
Hhvm中需要通过:
invokeFunc(&retval, unit->getMain(), Array::Create());
调用一次主函数进行调用(目前存在泄露)
 
正常替换过程为:
(1)       替换参数
(2)       替换内容
(3)       替换__lambda_func为对象名
 
37.         Warning: Cannot modify header information - headers already sent by (output
 
PHP报如下错误时:
Warning: Cannot modify header information - headers already sent by (output started at /export/data/www/test/test_ext/iconv/test_iconv.php:1) in /export/data/www/test/test_ext/iconv/test_iconv.php on line 3
 
设置php.ini
output_buffering=on
重启php即可
 
38.         Php json使用
<?php
 class myClass {
     public $item1 = 1;
     public $item2 = 'aa';
 }
 
 $c = new myClass();
 echo json_encode($c);
 ?>
 
39.         Array加入栈
$a=array();
array_push($a,”aaa”);
 
 
40.         ldap 扩展安装
cd php-5.3.5/ext/ldap
./configure --with-php-config=/export/servers/php-5.3.5/bin/php-config
报了如下错误;
configure: error: Cannot find ldap libraries in /usr/lib.
 
这是由于默认是查找的/usr/lib ldap的包是在/usr/lib64
./configure --with-php-config=/export/servers/php-5.3.5/bin/php-config --with-ldap --with-libdir=lib64/
 
通过--with-ldap --with-libdir=lib64 指定到lib64下即可(因为默认前面已经加上了/usr/….
然后运行configure成功

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-356360-1-1.html 上篇帖子: PHP常用函数小全 下篇帖子: PHP与MSSQL连接不上解决办法
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表