存档

‘PHP’ 分类的存档

php静态属性和静态方法

2013年2月22日 3 条评论

静态属性

静态属性也就是说它的值保持其值,比如在类中实例化了N个对象,那么你可以在构造函数中定义一个静态属性来记住对象的个数。类中的静态属性和静态变量差不多,只不过在类中似乎又多了一个些使用上的限制罢了。让我们看看一般的变量吧:
[php]
<?php

function test() {

$n = 1;

echo "The number is:$n
";

$n++;

}

test();

test();

test();

test();

test();

test();

?&gt;
[/php]
[php]
<?php function test() { $n = 1; echo "The number is:$n<br ?–>"; $n++;}test();test();test();test();test();test();?&gt;
[/php]
很显然这个函数的结果如下:
[php]
The number is:1

The number is:1

The number is:1

The number is:1

The number is:1

The number is:1
[/php]
但是如果你的程序是这样:
[php]
<?php

function test() {

static $n = 1;

echo "The number is:$n
";

$n++;

}

test();

test();

test();

test();

test();

test();

?&gt;
<!php function <br ?–> test() { static $n = 1; echo "The number is:$n
"; $n++;}test();test();test();test();test();test();?&gt;
[/php]
我们只不过在变量名加了个static关键字而已,结果就大大的不同了:
[php]
The number is:1

The number is:2

The number is:3

The number is:4

The number is:5

The number is:6
[/php]
1.static关键字可以用来修饰变量、方法(静态方法)

2.不经过实例化,就可以直接访问类中static的属性和static的方法。

3.static 的属性和方法,只能访问static的属性和方法,不能访问非静态的属性和方法。因为静态属性和方法被创建时,可能还没有任何这个类的实例可以被调用。

4.在当前类中如果要访问静态成员可以使用self::关键字进行访问。

5.在类中我们不能使用this关键来访问静态属性,因为静态属性在对象可能还没有实例化之前已经存在。

6.在类中静态方法访问静态属性,使用类名::静态属性名即可调用类中的静态属性。

静态方法

在这个示例里我们看到,使用了两种方法来访问静态属性$money的值:一种是前面都提到的类名::属性值的形式,另外一种则是使用了self关键字。当然推荐使用self关键字这种方式,因为如果那天不高兴了,我们修改的类名,那么如果你使用了第一种方式,你是不是还得修改下调用它的方法呢,当然你得在同一个类中,如果你是在子类中想调用父类的静态属性和方法,那就得使用parent::的方式了。

再说一下

1:如果你想在静态方法中调用其它静态方法时,请使用方法是:类名::方法名的形式进行调用,还是那句,如果你在同一个类进行这样的调用,就使用selft关键字进行调用吧。要不然你得的程序可就得报错了。

2:php中静态方法不能调用非静态的属性和非静态方法,也不能使用类名::或者self::调用非静态属性。更不能使用$this->属性名来调用,总之在静态方法中只能调用静态属性或方法,非静态的无法调用。

分类: PHP 标签: , ,

PHP常用代码

2012年5月1日 没有评论

Hash passwords with salts
[php]
// Déclaration des constantes
define(‘PREFIX_SALT’, ‘bonjour’);
define(‘SUFFIX_SALT’, ‘aurevoire’);
$hashSecure = md5(PREFIX_SALT.’m0tDePasse’.SUFFIX_SALT);
[/php]
HP Database Config

[php]

$dbhost = ‘127.0.0.1’;
$dbuser = ‘root’;
$dbpass = ”;
$dbname = ‘directory’;

[/php]

Simple PHP Math Image Captcha

[php]
// captcha width
$captcha_w = 150;
// captcha height
$captcha_h = 50;
// minimum font size; each operation element changes size
$min_font_size = 12;
// maximum font size
$max_font_size = 18;
// rotation angle
$angle = 20;
// background grid size
$bg_size = 13;
// path to font – needed to display the operation elements
$font_path = ‘fonts/courbd.ttf’;
// array of possible operators
$operators=array(‘+’,’-‘,’*’);
// first number random value; keep it lower than $second_num
$first_num = rand(1,5);
// second number random value
$second_num = rand(6,11);
[/php]

ZIP File PHP code script

[php]
require ("incl/zipfile.inc.php");
$zipfile = new zipfile();
$filedata = implode("", file("incl/zipfile.inc.php"));
$zipfile->add_dir("incl/");
$zipfile->add_file($filedata, "incl/zipfile.inc.php");
header("Content-type: application/octet-stream");
header("Content-disposition: attachment; filename=zipfile.zip");
echo $zipfile->file();
?>
[/php]

Extracting Image With PHP

[php]
$contenttograbimagefrom = $youroriginalhtmlwithimage;
$firstImage = "";
$output = preg_match_all(‘/<img.+src=[\’"]([^\’"]+)[\’"].*>/i’, $contenttograbimagefrom, $ContentImages);
$firstImage = $ContentImages[1] [0]; // To grab the first image
echo $firstImage;
[/php]

A simple PHP Mysql Class

[php]
//Simply include this file on your page
require_once("DbConnect.class.php");

//Set up all yor paramaters for connection
$db = new DbConnect("localhost","user","password","database",$error_reporting=false,$persistent=false);

//Open the connection to your database
$db->open() or die($db->error());

//Query the database now the connection has been made
$db->query("SELECT * FROM….") or die($db->error());

//You have several options on ways of fetching the data
//as an example I shall use
while($row=$db->fetcharray()) {

//do some stuff

}

//close your connection
$db->close();

#################################################################
Class DbConnect {

var $host = ”;
var $user = ”;
var $password = ”;
var $database = ”;
var $persistent = false;

var $conn = NULL;

var $result= false;
var $error_reporting = false;

/*constructor function this will run when we call the class */

function DbConnect ($host, $user, $password, $database, $error_reporting=true, $persistent=false) {

$this->host = $host;
$this->user = $user;
$this->password = $password;
$this->database = $database;
$this->persistent = $persistent;
$this->error_reporting = $error_reporting;
}

function open() {

if ($this->persistent) {

$func = ‘mysql_pconnect’;

} else {

$func = ‘mysql_connect’;

}

/* Connect to the MySQl Server */

$this->conn = $func($this->host, $this->user, $this->password);

if (!$this->conn) {

return false;

}

/* Select the requested DB */

if (@!mysql_select_db($this->database, $this->conn)) {

return false;
}
return true;
}

/*close the connection */

function close() {

return (@mysql_close($this->conn));
}

/* report error if error_reporting set to true */

function error() {

if ($this->error_reporting) {

return (mysql_error()) ;
}

}

function query($sql) {

$this->result = @mysql_query($sql, $this->conn);

return($this->result != false);

}
function affectedrows() {

return(@mysql_affected_rows($this->conn));
}

function numrows() {

return(@mysql_num_rows($this->result));

}
function fetchobject() {

return(@mysql_fetch_object($this->result, MYSQL_ASSOC));

}
function fetcharray() {

return(mysql_fetch_array($this->result));

}

function fetchassoc() {

return(@mysql_fetch_assoc($this->result));
}

function freeresult() {

return(@mysql_free_result($this->result));

}

}
[/php]

分类: PHP 标签: ,

PHP获取系统时间

2012年4月16日 没有评论

HP获取系统时间 CURRENT_TIMESTAMP

分类: PHP 标签: , ,

怎样移除wordpress3.1顶部的管理工具条?

2012年4月16日 没有评论

WordPress 3.1 新增加了管理工具条,可以让你快捷方便地在前台直接访问网站后台常用的功能,比如:发布新文章、页面;修改主题、挂件等。但也许您并不需要这些功能,那么该如何移除WordPress 3.1顶部的管理工具条呢?

打开你所使用主题的函数文件(对应主题文件夹内的functions.php 文件),然后添加下面这行代码:
1

[php]remove_action(‘init’,’_wp_admin_bar_init’);[/php]

注意’_wp_admin_bar_init’前面的_。

PHP Warning: PHP Startup: Unable to load dynamic library ‘e:/AppServ/php5/ext\\php_exif.dll

2012年3月9日 没有评论

不知道是电脑中毒了 还是怎么搞的 织梦后台一点链接就嗝屁了  电脑都卡死了
找了下Apache 错误日志

[php]PHP Warning: PHP Startup: Unable to load dynamic library ‘e:/AppServ/php5/ext\\php_exif.dll’ – \xd5\xd2\xb2\xbb\xb5\xbd\xd6\xb8\xb6\xa8\xb5\xc4\xc4\xa3\xbf\xe9\xa1\xa3\r\n in Unknown on line 0[/php]

网上找的解决办法
php_exif.dll的加载问题
原来php_exif.dll要求php_mbstring.dll引伸使能。 并且必须在php_exif.dll之前使能php_mbstring.dll,所以
php_mbstring.dll必须在php_exif.dll加载之前加载,可惜php.ini的加载顺序是按字母顺序排的,手动改加载顺序,重启apache,OK!

分类: PHP 标签: ,

PHP时区设置

2012年3月6日 4 条评论

从php5.1.0开始,php.ini里加入了date.timezone 这个选项,默认情况下是关闭的

也就是显示的时间都是格林威治标准时间

有以下两种方法可以显示正常的时间。

1. 在关于时间的初始化的语句的上面加上

date_default_timezone_set (XXX);

2. 修改php.ini查找date.timezone 去掉前面的分号
= 后面加XXX,重启http服务(如apache2或iis等)即可

关于XXX,大陆内地可用的值是:Asia/Chongqing ,Asia/Shanghai ,Asia/Urumqi (依次为重庆,上海,乌鲁木齐)
港台地区可用:Asia/Macao ,Asia/Hong_Kong ,Asia/Taipei (依次为澳门,香港,台北)
还有新加坡:Asia/Singapore

其他可用的值是:Etc/GMT-8 ,Singapore ,Hongkong ,PRC

在页头使用date_default_timezone_set()设置默认时区为北京时间

date_default_timezone_set(‘PRC’);
echo date(‘Y-m-d H:i:s’);

date_default_timezone_set用法如下

date_default_timezone_set
(PHP 5 >= 5.1.0RC1)

date_default_timezone_set — 设定用于一个脚本中所有日期时间函数的默认时区
说明

bool date_default_timezone_set ( string timezone_identifier )

date_default_timezone_set() 设定用于所有日期时间函数的默认时区。

注: 自 PHP 5.1.0 起(此版本日期时间函数被重写了),如果时区不合法则每个对日期时间函数的调用都会产生一条 E_NOTICE 级别的错误信息。

参数

timezone_identifier
时区标识符,例如 UTC 或 Europe/Lisbon

返回值

本函数永远返回 TRUE(即使 timezone_identifier 参数不合法)。

——————————————————————————————

再附上时区标识符:

CET
CST6CDT
Cuba
EET
Egypt
Eire
EST
EST5EDT
Etc/GMT
Etc/GMT+0
Etc/GMT+1
Etc/GMT+10
Etc/GMT+11
Etc/GMT+12
Etc/GMT+2
Etc/GMT+3
Etc/GMT+4
Etc/GMT+5
Etc/GMT+6
Etc/GMT+7
Etc/GMT+8
Etc/GMT+9
Etc/GMT-0
Etc/GMT-1
Etc/GMT-10
Etc/GMT-11
Etc/GMT-12
Etc/GMT-13
Etc/GMT-14
Etc/GMT-2
Etc/GMT-3
Etc/GMT-4
Etc/GMT-5
Etc/GMT-6
Etc/GMT-7
Etc/GMT-8
Etc/GMT-9
Etc/GMT0
Etc/Greenwich
Etc/UCT
Etc/Universal
Etc/UTC
Etc/Zulu
Factory
GB
GB-Eire
GMT
GMT+0
GMT-0
GMT0
Greenwich
Hongkong
HST
Iceland
Iran
Israel
Jamaica
Japan
Kwajalein
Libya
MET
MST
MST7MDT
Navajo
NZ
NZ-CHAT
Poland
Portugal
PRC
PST8PDT
ROC
ROK
Singapore
Turkey
UCT
Universal
UTC
W-SU
WET

分类: PHP 标签: , ,

PHP中调用mysqli方法出错解决方案

2012年3月2日 2 条评论

PHP中调用mysqli方法出错错误信息为:Fatal error: Trying to clone an uncloneable object of class mysqli

在DEDECMS里一般提示为:Fatal error: Trying to clone an uncloneable object of class mysqli in /home/httpd/html/ 我的域名/include/dedesqli.class.php on line 109

解决方法:打开php配置文件php.ini,找到zend.ze1_compatibility_mode,将该处值设置为off,重启服务器即可。

分类: PHP 标签: , , , , ,

最令PHP初学者头痛的十四个问题

2009年12月11日 没有评论


最令PHP初学者头痛的十四个问题

【1】面之间无法传递变量 get,post,session在最新的php 版本中自动全局变量是关闭的,所以要从上一面取得提交过来得变量要使用$_GET[’foo’],$_POST[’foo’],$_SESSION[’foo’]来得到。当然也可以修改自动全局变量为开(php .ini改为register_globals = On);考虑到兼容性,还是强迫自己熟悉新的写法比较好。

【2】Win下apache 用get方法传递中文参数会出错:

test.php ?a=你好&b=你也好

传递参数是会导致一个内部错误

解决办法:”test.php ?a=”.urlencode(你好).”&b=”.urlencode(你也好)

【3】win下的session不能正常工作

php .ini默认的session.save_path = /tmp

这显然是linux下的配置,win下php 无法读写session文件导致session无法使用,把它改成一个绝对路径就可以了,例如session.save_path = c:windows emp

【4】显示错误信息

当php .ini的display_errors = On并且error_reporting = E_ALL时,将显示所有的错误和提示,调试的时候最好打开以便纠错,如果你用以前php 写法错误信息多半是关于未定义变量的。变量在赋值以前调用会有提示,解决办法是探测或者屏蔽。

例如显示$foo,可以if(isset($foo)) echo $foo 或者echo @$foo

【5】Win下mail()不能发送电子邮件

在linux下配置好的sendmail可以发送,在win下需要调用smtp服务器 来发送电子邮件,修改php .ini的SMTP = ip //ip是不带验证功能的smtp服务器 (网上很难找到)

php 发送邮件的最好解决方法是用socket直接发送到对方email服务器 而不用转发服务器 。

【6】初装的mysql如果没有设置密码,应该使用update mysql.user set password=”yourpassword” where user=”root” 修改密码

【7】header already sent

这个错误通常会在你使用HEADER的时候出现,他可能是几种原因:,你在使用HEADER前PRING或者ECHO了.你当前文件前面有空行.你可能INCLUDE了一个文件,该文件尾部有空行或者输出也会出现这种错误。!

【8】更改php .ini后没有变化

重新启动web server,比如IIS,Apache等等,然后才会应用最新的设置。

【9】php 在00上面安装(ISAPI的安装方法恳请高手指教)

PHP的php isapi.dll好像和00有些冲突,只能用CGI 模式安装

步骤一,先www.php.net 下在一个安装程序,我是装的是:php -..-installer.exe,你也可以去找最新的版本,在安装php -..-installer.exe之前保证你的IIS6.0启动了,并能够访问。安装好以后,在默认网站–>应用程序配置。

步骤二:点击 web服务扩展 –>新建web服务扩展。

步骤三: 扩展名–>php ,然后添加

步骤四:找到php .exe的路径添加上去。

步骤五: 确定就可以了!

步骤六: 选择php 的服务扩展,然后点击允许。

【10】有时候sql语句不起作用,对数据库操作失败,最简便的调试方法,echo那句sql,看看变量的值能得到不。

【11】include和require的区别

两者没有太大的区别,如果要包含的文件不存在,include提示notice,然后继续执行下面的语句,require提示致命错误并且退出。

据我测试,win平台下它们都是先包含后执行,所以被包含文件里最好不要再有include或require语句,这样会造成目录混乱。或许*nux下情况不同,暂时还没测试。

如果一个文件不想被包含多次可以使用include_once或require_once## 读取,写入文档数据。

function r($file_name) {
$filenum=@fopen($file_name,”r”);
@flock($filenum,LOCK_SH);
$file_data=@fread($filenum,filesize($file_name));
@fclose($filenum);
return $file_data;
}
function w($file_name,$data,$method=”w”){
$filenum=@fopen($file_name,$method);
flock($filenum,LOCK_EX);
$file_data=fwrite($filenum,$data);
fclose($filenum);
return $file_data;
}
【12】isset()和empty()的区别

两者都是测试变量用的,但是isset()是测试变量是否被赋值,而empty()是测试一个已经被赋值的变量是否为空。

如果一个变量没被赋值就引用在php 里是被允许的,但会有notice提示,如果一个变量被赋空值,$foo=””或者$foo=0或者 $foo=false,那么empty($foo)返回真,isset($foo)也返回真,就是说赋空值不会注销一个变量。

要注销一个变量,可以用 unset($foo)或者$foo=NULL

【13】mysql查询语句包含有关键字

php 查询mysql的时候,有时候mysql表名或者列名会有关键字,这时候查询会有错误。例如表名是order,查询时候会出错,简单的办法是sql语句里表名或者列名加上`[tab键上面]来加以区别,例如select * from `order`

【14】通过HTTP协议一次上传多个文件的方法

有两个思路,是同一个方法的两种实现。具体程序还需自己去设计。

、在form中设置多个文件输入框,用数组命名他们的名字,如下:

<form action=”” method=post>
<input type=file name=usefile[]>
<input type=file name=usefile[]>
<input type=file name=usefile[]>
</form>
这样,在服务器 端做以下测试:

echo “<pre>”;
print_r($_FILES);
echo “</pre>”;
、在form中设置多个文件输入框,但名字不同,如下:

<form action=”” method=post>
<input type=file name=usefile_a>
<input type=file name=usefile_b>
<input type=file name=usefile_c>
</form>
在服务器 端做同样测试:

echo “<pre>”;
print_r($_FILES);
echo “</pre>”;

来源:php100