当前位置: 编程技术>php
本页文章导读:
▪apache+php+mysql安装配置方法小结
整个安装流程如下: 1,首先安装apache:我安装的版本是: httpd-2.2.16-win32-x86-openssl-0.9.8o.msi 网址:http://www.apache.org/dist/httpd/binaries/win32/ apache安装和配置比较顺利,没什么好说的。 更改文件.........
▪PHP 作用域解析运算符(::)
Scope Resolution Operator (::) 今天 看joomla源码的时候,才意识到。原来这个操作符还可以访问类的非静态方法啊。真的让我吃惊不好。一直以为作用域解析运算符只能访问类的static方法和static成.........
▪PHP中的integer类型使用分析
integer 可以已10进制,8进制,16进制表示。 用八进制表示的时候,数字需要已0(零)开头; 用十六进制表示的时候,数字需要已0x(零x)或者0X(零大写X)开头; integer 溢出: integer溢出的时候.........
[1]apache+php+mysql安装配置方法小结
来源: 互联网 发布时间: 2013-11-30
整个安装流程如下:
1,首先安装apache:我安装的版本是: httpd-2.2.16-win32-x86-openssl-0.9.8o.msi
网址:http://www.apache.org/dist/httpd/binaries/win32/
apache安装和配置比较顺利,没什么好说的。
更改文件路径的方法:
在文件的安装目录下,我的是:D:\Program Files\Apache Software Foundation\Apache2.2\conf,打开httpd.conf搜索:DocumentRoot “C:/web/apache/htdocs”将值修改成你想要的发布路径,比如:
DocumentRoot “D:/WWW”
然后还有一处也需要修改
搜索:Directory “C:/web/apache/htdocs”
修改为:Directory “D:/WWW”
这样就更改了文件的发布路径到d:www下。
2,安装PHP:版本:php-5.3.3-Win32-VC6-x86
网址: http://windows.php.net/download/
将下载的压缩包解压到D:php,将该目录下的 php.ini-development 更名为 php.ini
打开php.ini,修改如下:
搜索:error_reporting = E_ALL
修改:error_reporting =E_ALL & ~E_NOTICE
这里是修改错误报告级别,E_ALL 是报告所有的错误,E_NOTICE是报告运行时注意的消息,如为初始化的变量。
搜索:extension_dir = “./”
修改:extension_dir = "D:\php5\ext",配置扩展库的路径
搜索:;extension=PHP_MySQL.dll,去掉前面的分号:extension=PHP_MySQL.dll
搜索:;extension=PHP_mysqli.dll去掉前面的分号:extension=PHP_mysqli.dll
搜索;session.save_path = “/tmp”,修改为一个存在的路径里,session.save_path = "D:/mysql/session",或者到发布目录下建立一个 tmp 文件夹。
PHP基本设置完毕
3,配置apache加载PHP
打开apachede的安装目录,我的是:D:\Program Files\Apache Software Foundation\Apache2.2\conf\extra,新建一个名为:httpd-php5.conf 的文本文件,打开添加以下内容
view sourceprint?LoadModule php5_module "C:\web\php\php5apache2_2.dll"
AddType application/x-httpd-php .php
AddType application/x-httpd-php-source .phps
DirectoryIndex index.php
PHPIniDir "C:\web\php"
然后打开:C:\web\apache\conf\httpd.conf,在文件末尾添加一行:
Include conf/extra/httpd-php5.conf
重新启动 Apache,打开目录:D:\WWW,新建文件:index.php,输入内容:
<?php
phpinfo();
?>
使用浏览器打开http://localhost,测试是否安装成功
第四步:安装mysql:版本mysql-5.1.49-win32
网址:http://dev.mysql.com/downloads/mysql/#downloads
安装后有个配置向导,没有很严格要按照哪个选项去设置,按自己需要设置就行了,影响不大。
与Apache及php相结合,前面已提过,这里再说一下,在php安装目录下找到 php.ini,把“;extension=php_mysql.dll”前的“;”去掉,加载mysql模块。保存,关闭后, 重启apache就可以了。
第五步:安装 phpMyAdmin
我在华军软件下载的:http://www.onlinedown.net/soft/2616.htm
解压放到发布目录下,就是前面设置过的D:\WWW;更改\libraries文件夹下的config.default.php
做以下修改:
1 查找 password 有如下两行
$cfg['Servers'][$i]['user'] = 'root';
$cfg['Servers'][$i]['password'] = '';
把你的mysql密码填到$cfg['Servers'][$i]['password'] = ''; 单引号里边
2 搜索 $cfg['PmaAbsoluteUri'],将其设置为 phpMyAdmin 目录路径,如:http://localhost/phpMyAdmin/
上面的做法不知道是不是必要的,因为我后来改回后也可以运行。
配置过程中遇到的问题小结:
一,安装mysql失败。
一般情况是以前的Mysql卸载不完全。如何才能够干净卸载mysql?在DOS环境下
1,先停止mysql服务:停止Mysql: net stop mysql,也可以右键“我的电脑”——管理——服务——找到mysql服务,然后停止。
2,在DOS下卸载 c:\mysql\bin\mysqld-nt --remove
//c:\mysql\bin\是具体路径,想完全删除mysql,先结束mysql进程,然后卸载mysql。
另附两个DOS的指令是:
启动Mysql: net start mysql
安装:c:\mysql\bin\mysqld --install //注意修改具体路径
3,把残留的mysql文件直接删除。
如果是不小心把mysql的文件全部删除了,之前又没有执行上面的卸载功能,可以用下面的方法:
1,停止mysql服务,同上1.
2,手动删除注册表信息:
在注册表里(regedit)清除你的MYSQL服务。有几个地方:HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services\Eventlog\Application\MySQL 目录删除;HKEY_LOCAL_MACHINE\SYSTEM\ControlSet002\Services\Eventlog\Application\MySQL 目录删除;HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Eventlog\Application\MySQL 目录删除;
如图:
重启即可。
二,连接数据库的时候出现问题:
“由于连接方在一段时间后没有正确答复或连接的主机没有反应”,我在测试mysql连接的时候出现
[Ctrl+A 全选 注:如需引入外部Js需刷新才能执行]
原因是mysql的解析出错,原因是 hosts 文件没有定义,把localhost换成127.0.0.1就显示正常,或者在C:\Windows\System32\drivers\etc下,修改hosts文件,增加127.0.0.1 localhost即可。
PHP配置环境(标准配置) word版
1,首先安装apache:我安装的版本是: httpd-2.2.16-win32-x86-openssl-0.9.8o.msi
网址:http://www.apache.org/dist/httpd/binaries/win32/
apache安装和配置比较顺利,没什么好说的。
更改文件路径的方法:
在文件的安装目录下,我的是:D:\Program Files\Apache Software Foundation\Apache2.2\conf,打开httpd.conf搜索:DocumentRoot “C:/web/apache/htdocs”将值修改成你想要的发布路径,比如:
DocumentRoot “D:/WWW”
然后还有一处也需要修改
搜索:Directory “C:/web/apache/htdocs”
修改为:Directory “D:/WWW”
这样就更改了文件的发布路径到d:www下。
2,安装PHP:版本:php-5.3.3-Win32-VC6-x86
网址: http://windows.php.net/download/
将下载的压缩包解压到D:php,将该目录下的 php.ini-development 更名为 php.ini
打开php.ini,修改如下:
搜索:error_reporting = E_ALL
修改:error_reporting =E_ALL & ~E_NOTICE
这里是修改错误报告级别,E_ALL 是报告所有的错误,E_NOTICE是报告运行时注意的消息,如为初始化的变量。
搜索:extension_dir = “./”
修改:extension_dir = "D:\php5\ext",配置扩展库的路径
搜索:;extension=PHP_MySQL.dll,去掉前面的分号:extension=PHP_MySQL.dll
搜索:;extension=PHP_mysqli.dll去掉前面的分号:extension=PHP_mysqli.dll
搜索;session.save_path = “/tmp”,修改为一个存在的路径里,session.save_path = "D:/mysql/session",或者到发布目录下建立一个 tmp 文件夹。
PHP基本设置完毕
3,配置apache加载PHP
打开apachede的安装目录,我的是:D:\Program Files\Apache Software Foundation\Apache2.2\conf\extra,新建一个名为:httpd-php5.conf 的文本文件,打开添加以下内容
view sourceprint?LoadModule php5_module "C:\web\php\php5apache2_2.dll"
AddType application/x-httpd-php .php
AddType application/x-httpd-php-source .phps
DirectoryIndex index.php
PHPIniDir "C:\web\php"
然后打开:C:\web\apache\conf\httpd.conf,在文件末尾添加一行:
Include conf/extra/httpd-php5.conf
重新启动 Apache,打开目录:D:\WWW,新建文件:index.php,输入内容:
<?php
phpinfo();
?>
使用浏览器打开http://localhost,测试是否安装成功
第四步:安装mysql:版本mysql-5.1.49-win32
网址:http://dev.mysql.com/downloads/mysql/#downloads
安装后有个配置向导,没有很严格要按照哪个选项去设置,按自己需要设置就行了,影响不大。
与Apache及php相结合,前面已提过,这里再说一下,在php安装目录下找到 php.ini,把“;extension=php_mysql.dll”前的“;”去掉,加载mysql模块。保存,关闭后, 重启apache就可以了。
第五步:安装 phpMyAdmin
我在华军软件下载的:http://www.onlinedown.net/soft/2616.htm
解压放到发布目录下,就是前面设置过的D:\WWW;更改\libraries文件夹下的config.default.php
做以下修改:
1 查找 password 有如下两行
$cfg['Servers'][$i]['user'] = 'root';
$cfg['Servers'][$i]['password'] = '';
把你的mysql密码填到$cfg['Servers'][$i]['password'] = ''; 单引号里边
2 搜索 $cfg['PmaAbsoluteUri'],将其设置为 phpMyAdmin 目录路径,如:http://localhost/phpMyAdmin/
上面的做法不知道是不是必要的,因为我后来改回后也可以运行。
配置过程中遇到的问题小结:
一,安装mysql失败。
一般情况是以前的Mysql卸载不完全。如何才能够干净卸载mysql?在DOS环境下
1,先停止mysql服务:停止Mysql: net stop mysql,也可以右键“我的电脑”——管理——服务——找到mysql服务,然后停止。
2,在DOS下卸载 c:\mysql\bin\mysqld-nt --remove
//c:\mysql\bin\是具体路径,想完全删除mysql,先结束mysql进程,然后卸载mysql。
另附两个DOS的指令是:
启动Mysql: net start mysql
安装:c:\mysql\bin\mysqld --install //注意修改具体路径
3,把残留的mysql文件直接删除。
如果是不小心把mysql的文件全部删除了,之前又没有执行上面的卸载功能,可以用下面的方法:
1,停止mysql服务,同上1.
2,手动删除注册表信息:
在注册表里(regedit)清除你的MYSQL服务。有几个地方:HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services\Eventlog\Application\MySQL 目录删除;HKEY_LOCAL_MACHINE\SYSTEM\ControlSet002\Services\Eventlog\Application\MySQL 目录删除;HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Eventlog\Application\MySQL 目录删除;
如图:
重启即可。
二,连接数据库的时候出现问题:
“由于连接方在一段时间后没有正确答复或连接的主机没有反应”,我在测试mysql连接的时候出现
[Ctrl+A 全选 注:如需引入外部Js需刷新才能执行]
原因是mysql的解析出错,原因是 hosts 文件没有定义,把localhost换成127.0.0.1就显示正常,或者在C:\Windows\System32\drivers\etc下,修改hosts文件,增加127.0.0.1 localhost即可。
PHP配置环境(标准配置) word版
[2]PHP 作用域解析运算符(::)
来源: 互联网 发布时间: 2013-11-30
Scope Resolution Operator (::)
今天 看joomla源码的时候,才意识到。原来这个操作符还可以访问类的非静态方法啊。真的让我吃惊不好。一直以为作用域解析运算符只能访问类的static方法和static成员变量。
如果各位不相信,下面有个简单的小测试代码可以证明这个。
class A{
private $_name = 'A';
function __construct(){
echo 'A construct <br />';
}
function test(){
echo 'A test() <br />';
}
}
class B extends A{
private $_name = 'B';
function __construct(){
parent::__construct();
echo 'B construct <br />';
}
function test(){
echo 'B test()';
}
}
A::test();
echo '######### <br />';
B::test();
这段代码输入的结果为:
A test()
#########
B test()
虽然A类中的test()和B类中的test都不是 static方法,但是一样可以用 “类名::方法名称(参数列表)” 的样式进行正确调用。他的效果和 new 一个类的实例,然后用这个实例调用
test方法是一个样的。
但是,如果我需要在test方法中打印name属性,直接用::来调用 会是怎么个情况那.我们首先来修改下 上面的代码。
class A{
private $_name = 'A';
function __construct(){
echo 'A construct <br />';
}
function test(){
echo 'A test() <br />', $this->$_name,'<br />';
}
}
class B extends A{
private $_name = 'B';
function __construct(){
parent::__construct();
echo 'B construct <br />';
}
function test(){
echo 'B test()', $this->_name,'<br />';
}
}
A::test();
echo '######### <br />';
B::test();
上面的代码运行的结果 如下:
Fatal error: Using $this when not in object context in D:\www\test\scoperefe.php on line 9
[html]
那有的朋友就说了。你压根就没有实例化类A,当然不能直接用$this->_name的方式来访问成员变量$_name了,那么,是不是修改成self::$_name就行了哪?
说干就干,下面把上面的代码修改下
[code]
class A{
private $_name = 'A';
function __construct(){
echo 'A construct <br />';
}
function test(){
echo 'A test() <br />', self::$_name,'<br />';
}
}
class B extends A{
private $_name = 'B';
function __construct(){
parent::__construct();
echo 'B construct <br />';
}
function test(){
echo 'B test()', $this->_name,'<br />';
}
}
A::test();
echo '######### <br />';
B::test();
再运行上面的代码,结果如下:
A test() Fatal error: Access to undeclared static property: A::$_name in D:\www\test\scoperefe.php on line 9
哦,原来不能用self 关键字访问当前类的非static方法。
现在,如果想正确的调用这个方法,有2个做法:
1、首先实例化类,然后用对象调用就可以直接使用$this->_name进行调用了;
2、将成员变量$_name设置为static;
上面的问题,相信大家都能够正确的处理。
其实我真正想说的是:
如果一个方法可以不进行实例化就调用,那么我们最好把这个方法使用static关键字修饰下。在实现方法的时候,只调用该类的static成员变量。这样就不会出现上面遇到问题了。
如果一个方法没有设置为static的方法。那么,最安全的做法还是用实例对象进行调用更为安全,因为,说不定什么时候就需要修改该方法的实现,在修改的时候,说不定就要调用该类中的
非static成员变量(因为,很大程度上在修改方法的实现的时候,已经忘记还有用类名直接调用这么一说)。
个人愚见。
今天 看joomla源码的时候,才意识到。原来这个操作符还可以访问类的非静态方法啊。真的让我吃惊不好。一直以为作用域解析运算符只能访问类的static方法和static成员变量。
如果各位不相信,下面有个简单的小测试代码可以证明这个。
代码如下:
class A{
private $_name = 'A';
function __construct(){
echo 'A construct <br />';
}
function test(){
echo 'A test() <br />';
}
}
class B extends A{
private $_name = 'B';
function __construct(){
parent::__construct();
echo 'B construct <br />';
}
function test(){
echo 'B test()';
}
}
A::test();
echo '######### <br />';
B::test();
这段代码输入的结果为:
代码如下:
A test()
#########
B test()
虽然A类中的test()和B类中的test都不是 static方法,但是一样可以用 “类名::方法名称(参数列表)” 的样式进行正确调用。他的效果和 new 一个类的实例,然后用这个实例调用
test方法是一个样的。
但是,如果我需要在test方法中打印name属性,直接用::来调用 会是怎么个情况那.我们首先来修改下 上面的代码。
代码如下:
class A{
private $_name = 'A';
function __construct(){
echo 'A construct <br />';
}
function test(){
echo 'A test() <br />', $this->$_name,'<br />';
}
}
class B extends A{
private $_name = 'B';
function __construct(){
parent::__construct();
echo 'B construct <br />';
}
function test(){
echo 'B test()', $this->_name,'<br />';
}
}
A::test();
echo '######### <br />';
B::test();
上面的代码运行的结果 如下:
代码如下:
Fatal error: Using $this when not in object context in D:\www\test\scoperefe.php on line 9
[html]
那有的朋友就说了。你压根就没有实例化类A,当然不能直接用$this->_name的方式来访问成员变量$_name了,那么,是不是修改成self::$_name就行了哪?
说干就干,下面把上面的代码修改下
[code]
class A{
private $_name = 'A';
function __construct(){
echo 'A construct <br />';
}
function test(){
echo 'A test() <br />', self::$_name,'<br />';
}
}
class B extends A{
private $_name = 'B';
function __construct(){
parent::__construct();
echo 'B construct <br />';
}
function test(){
echo 'B test()', $this->_name,'<br />';
}
}
A::test();
echo '######### <br />';
B::test();
再运行上面的代码,结果如下:
代码如下:
A test() Fatal error: Access to undeclared static property: A::$_name in D:\www\test\scoperefe.php on line 9
哦,原来不能用self 关键字访问当前类的非static方法。
现在,如果想正确的调用这个方法,有2个做法:
1、首先实例化类,然后用对象调用就可以直接使用$this->_name进行调用了;
2、将成员变量$_name设置为static;
上面的问题,相信大家都能够正确的处理。
其实我真正想说的是:
如果一个方法可以不进行实例化就调用,那么我们最好把这个方法使用static关键字修饰下。在实现方法的时候,只调用该类的static成员变量。这样就不会出现上面遇到问题了。
如果一个方法没有设置为static的方法。那么,最安全的做法还是用实例对象进行调用更为安全,因为,说不定什么时候就需要修改该方法的实现,在修改的时候,说不定就要调用该类中的
非static成员变量(因为,很大程度上在修改方法的实现的时候,已经忘记还有用类名直接调用这么一说)。
个人愚见。
[3]PHP中的integer类型使用分析
来源: 互联网 发布时间: 2013-11-30
integer 可以已10进制,8进制,16进制表示。
用八进制表示的时候,数字需要已0(零)开头;
用十六进制表示的时候,数字需要已0x(零x)或者0X(零大写X)开头;
integer 溢出: integer溢出的时候,会自动的转化为float类型。同样的,如果integer类型的操作结果溢出了integer类型的边界,也会自动转化为float类型。
需要注意的一点就是,integer类型没有"/" (除法)操作,如果需要获得一个整型可以使用round等函数,或者直接使用(int)或(integer)进行强制类型转化为integer也行.
转换为integer:
boolean 转化为integer:
1、true 总是转换为 1;
2、false总是转换为 0;
float转化为integer:
1、如果float类型值没有超过integer的边界值,那么转换的时候会直接将小数部分直接截掉。
2、如果float类型值超过了integer的边界值,那么转换的结果是没定义的,但几乎肯定不是预期的结果。
array类型转换为integer:
1、空array总是转化为0;
2、非空array总是转化为1;
object转换为integer:
1、把object类型的值转换为integer 会产生类似 Object of class stdClass could not be converted to int 的Notice 信息。转换的结果为1;
string转化为integer:
1、如果string以数字开头并且,其中不包含字符‘.','e','E',并且数字的值在integer范围之内,string将转化为integer。
$resource = fopen('d:/tmp/test.txt', 'rb');
var_dump($resource, (int)$resource);
2、如果string为空字符串,或者没有已数字开头,string可以转化为integer 0;
3、其他情况下 string将会转化为float类型;
resources转换为integer:
1、将resources类型的值转换为integer,会将resource对应的id
例如:
的结果
resource(3) of type (stream) int(3)
null转换为integer:
1、null转换为integer总是0
未定义的变量转化为integer:
1、未定义的变量转换为integer会产生一个notice信息,并转换为0
用八进制表示的时候,数字需要已0(零)开头;
用十六进制表示的时候,数字需要已0x(零x)或者0X(零大写X)开头;
integer 溢出: integer溢出的时候,会自动的转化为float类型。同样的,如果integer类型的操作结果溢出了integer类型的边界,也会自动转化为float类型。
需要注意的一点就是,integer类型没有"/" (除法)操作,如果需要获得一个整型可以使用round等函数,或者直接使用(int)或(integer)进行强制类型转化为integer也行.
转换为integer:
boolean 转化为integer:
1、true 总是转换为 1;
2、false总是转换为 0;
float转化为integer:
1、如果float类型值没有超过integer的边界值,那么转换的时候会直接将小数部分直接截掉。
2、如果float类型值超过了integer的边界值,那么转换的结果是没定义的,但几乎肯定不是预期的结果。
array类型转换为integer:
1、空array总是转化为0;
2、非空array总是转化为1;
object转换为integer:
1、把object类型的值转换为integer 会产生类似 Object of class stdClass could not be converted to int 的Notice 信息。转换的结果为1;
string转化为integer:
1、如果string以数字开头并且,其中不包含字符‘.','e','E',并且数字的值在integer范围之内,string将转化为integer。
代码如下:
$resource = fopen('d:/tmp/test.txt', 'rb');
var_dump($resource, (int)$resource);
2、如果string为空字符串,或者没有已数字开头,string可以转化为integer 0;
3、其他情况下 string将会转化为float类型;
resources转换为integer:
1、将resources类型的值转换为integer,会将resource对应的id
例如:
的结果
代码如下:
resource(3) of type (stream) int(3)
null转换为integer:
1、null转换为integer总是0
未定义的变量转化为integer:
1、未定义的变量转换为integer会产生一个notice信息,并转换为0
最新技术文章: