自由虽然有代价,但一切都值得!!!
其实想起以前,印在记忆理抹不去的,只有那一轮明月!而藏在心底最深处的,却也只是情人的眼泪,和最后一次她在你面前伤感的把头低垂! 而现在,多么想伸出双手,让风吹扬而起的她的秀发,温柔地舒张在手指之间,让我回到过去那些不知珍惜的岁月和情感中,轻轻的忏悔,将我压在心里多年的话语,在你耳边轻诉---“你走了,但却再也没有离开过~~~”
posts - 40,comments - 58,trackbacks - 0
FTP的命令行格式为:ftp -v -d -i -n -g [主机名],其中

  -v显示远程服务器的所有响应信息;

  -n限制ftp的自动登录,即不使用;

  .n etrc文件;

  -d使用调试方式;

  -g取消全局文件名。

  ftp使用的内部命令如下(中括号表示可选项):

  1.![cmd[args]]:在本地机中执行交互shell,exit回到ftp环境,如:!ls*.zip.

  2.$ macro-ame[args]:执行宏定义macro-name.

  3.account[password]:提供登录远程系统成功后访问系统资源所需的补充口令。

  4.append local-file[remote-file]:将本地文件追加到远程系统主机,若未指定远程系统文件名,则使用本地文件名。

  5.ascii:使用ascii类型传输方式。

  6.bell:每个命令执行完毕后计算机响铃一次。

  7.bin:使用二进制文件传输方式。

  8.bye:退出ftp会话过程。

  9.case:在使用mget时,将远程主机文件名中的大写转为小写字母。

  10.cd remote-dir:进入远程主机目录。

  11.cdup:进入远程主机目录的父目录。

  12.chmod mode file-name:将远程主机文件file-name的存取方式设置为mode,如:chmod 777 a.out。

  13.close:中断与远程服务器的ftp会话(与open对应)。

  14.cr:使用asscii方式传输文件时,将回车换行转换为回行。

  15.delete remote-file:删除远程主机文件。

  16.debug[debug-value]:设置调试方式,显示发送至远程主机的每条命令,如:deb up 3,若设为0,表示取消debug。

  17.dir[remote-dir][local-file]:显示远程主机目录,并将结果存入本地文件local-file。

  18.disconnection:同close。

  19.form format:将文件传输方式设置为format,缺省为file方式。

  20.get remote-file[local-file]:将远程主机的文件remote-file传至本地硬盘的local-file。

  21.glob:设置mdelete,mget,mput的文件名扩展,缺省时不扩展文件名,同命令行的-g参数。

  22.hash:每传输1024字节,显示一个hash符号(#)。

  23.help[cmd]:显示ftp内部命令cmd的帮助信息,如:help get。

  24.idle[seconds]:将远程服务器的休眠计时器设为[seconds]秒。

  25.image:设置二进制传输方式(同binary)。

  26.lcd[dir]:将本地工作目录切换至dir。

  27.ls[remote-dir][local-file]:显示远程目录remote-dir,并存入本地文件local-file。

  28.macdef macro-name:定义一个宏,遇到macdef下的空行时,宏定义结束。

  29.mdelete[remote-file]:删除远程主机文件。

  30.mdir remote-files local-file:与dir类似,但可指定多个远程文件,如:mdir *.o.*.zipoutfile

  31.mget remote-files:传输多个远程文件。

  32.mkdir dir-name:在远程主机中建一目录。

  33.mls remote-file local-file:同nlist,但可指定多个文件名。

  34.mode[modename]:将文件传输方式设置为modename,缺省为stream方式。

  35.modtime file-name:显示远程主机文件的最后修改时间。

  36.mput local-file:将多个文件传输至远程主机。

  37.newer file-name:如果远程机中file-name的修改时间比本地硬盘同名文件的时间更近,则重传该文件。

  38.nlist[remote-dir][local-file]:显示远程主机目录的文件清单,并存入本地硬盘的local-file。

  39.nmap[inpattern outpattern]:设置文件名映射机制,使得文件传输时,文件中的某些字符相互转换,如:nmap $1.$2.$3[$1,$2].[$2,$3],则传输文件a1.a2.a3时,文件名变为a1,a2。该命令特别适用于远程主机为非UNIX机的情况。

  40.ntrans[inchars[outchars]]:设置文件名字符的翻译机制,如ntrans 1R,则文件名LLL将变为RRR。

  41.open host[port]:建立指定ftp服务器连接,可指定连接端口。

  42.passive:进入被动传输方式。

  43.prompt:设置多个文件传输时的交互提示。

  44.proxy ftp-cmd:在次要控制连接中,执行一条ftp命令,该命令允许连接两个ftp服务器,以在两个服务器间传输文件。第一条ftp命令必须为open,以首先建立两个服务器间的连接。

  45.put local-file[remote-file]:将本地文件local-file传送至远程主机。

  46.pwd:显示远程主机的当前工作目录。

  47.quit:同bye,退出ftp会话。

  48.quote arg1,arg2...:将参数逐字发至远程ftp服务器,如:quote syst.

  49.recv remote-file[local-file]:同get。

  50.reget remote-file[local-file]:类似于get,但若local-file存在,则从上次传输中断处续传。

  51.rhelp[cmd-name]:请求获得远程主机的帮助。

  52.rstatus[file-name]:若未指定文件名,则显示远程主机的状态,否则显示文件状态。

  53.rename[from][to]:更改远程主机文件名。

  54.reset:清除回答队列。

  55.restart marker:从指定的标志marker处,重新开始get或put,如:restart 130。

  56.rmdir dir-name:删除远程主机目录。

  57.runique:设置文件名唯一性存储,若文件存在,则在原文件后加后缀..1,.2等。

  58.send local-file[remote-file]:同put。

  59.sendport:设置PORT命令的使用。

  60.site arg1,arg2...:将参数作为SITE命令逐字发送至远程ftp主机。

  61.size file-name:显示远程主机文件大小,如:site idle 7200。

  62.status:显示当前ftp状态。

  63.struct[struct-name]:将文件传输结构设置为struct-name,缺省时使用stream结构。

  64.sunique:将远程主机文件名存储设置为唯一(与runique对应)。

  65.system:显示远程主机的操作系统类型。

  66.tenex:将文件传输类型设置为TENEX机的所需的类型。

  67.tick:设置传输时的字节计数器。

  68.trace:设置包跟踪。

  69.type[type-name]:设置文件传输类型为type-name,缺省为ascii,如:type binary,设置二进制传输方式。

  70.umask[newmask]:将远程服务器的缺省umask设置为newmask,如:umask 3。

  71.user user-name[password][account]:向远程主机表明自己的身份,需要口令时,必须输入口令,如:user anonymous my@email。

  72.verbose:同命令行的-v参数,即设置详尽报告方式,ftp服务器的所有响应都将显示给用户,缺省为on.

  73.?[cmd]:同help。
posted @ 2008-06-13 06:45 sosopro 阅读(399) | 评论 (0)编辑 收藏
 /etc/network/interfaces
打开后里面可设置DHCP或手动设置静态ip。前面auto eth0,让网卡开机自动挂载.
1. 以DHCP方式配置网卡
编辑文件/etc/network/interfaces:
sudo vi /etc/network/interfaces
并用下面的行来替换有关eth0的行:
# The primary network interface - use DHCP to find our address
auto eth0
iface eth0 inet dhcp
用下面的命令使网络设置生效:
sudo /etc/init.d/networking restart
也可以在命令行下直接输入下面的命令来获取地址
sudo dhclient eth0
2. 为网卡配置静态IP地址
编辑文件/etc/network/interfaces:
sudo vi /etc/network/interfaces
并用下面的行来替换有关eth0的行:# The primary network interface
auto eth0
iface eth0 inet static
address 192.168.3.90
gateway 192.168.3.1
netmask 255.255.255.0
#network 192.168.3.0
#broadcast 192.168.3.255
将上面的ip地址等信息换成你自己就可以了.用下面的命令使网络设置生效:
sudo /etc/init.d/networking restart
3. 设定第二个IP地址(虚拟IP地址)
编辑文件/etc/network/interfaces:
sudo vi /etc/network/interfaces
在该文件中添加如下的行:
auto eth0:1
iface eth0:1 inet static
address 192.168.1.60
netmask 255.255.255.0
network x.x.x.x
broadcast x.x.x.x
gateway x.x.x.x
根据你的情况填上所有诸如address,netmask,network,broadcast和gateways等信息.
用下面的命令使网络设置生效:
sudo /etc/init.d/networking restart
4. 设置主机名称(hostname)
使用下面的命令来查看当前主机的主机名称:
sudo /bin/hostname
使用下面的命令来设置当前主机的主机名称:
sudo /bin/hostname newname
系统启动时,它会从/etc/hostname来读取主机的名称.
5. 配置DNS
首先,你可以在/etc/hosts中加入一些主机名称和这些主机名称对应的IP地址,这是简单使用本机的静态查询.
要访问DNS 服务器来进行查询,需要设置/etc/resolv.conf文件.
假设DNS服务器的IP地址是192.168.3.2, 那么/etc/resolv.conf文件的内容应为:
search test.com
nameserver 192.168.3.2
posted @ 2008-06-13 04:51 sosopro 阅读(616) | 评论 (0)编辑 收藏
开始我是在win2000上研究,几乎没有出现过乱码问题,可是昨晚换了台XP系统的电脑,坏了,MYSQL5.1根本就不能建立表,后来装了MYSQL4.1,可是乱码来了,换了N多字符集,没用.最后没法,PHP 和APACHE里都没有指定字符集,在MY.INI里的选用默认的,虽然有个表会建立不了报错,但是已经解决问题,方法就是改下字段的属性
CREATE TABLE `#__core_acl_aro` (
  `aro_id` int(11) NOT NULL auto_increment,
  `section_value` varchar(240) NOT NULL default '0',
  `value` varchar(240) NOT NULL default '',
  `order_value` int(11) NOT NULL default '0',
  `name` varchar(255) NOT NULL default '',
  `hidden` int(11) NOT NULL default '0',
  PRIMARY KEY  (`aro_id`),
  UNIQUE KEY `section_value_value_aro` (`section_value`,`value`),
  UNIQUE KEY `#__gacl_section_value_value_aro` (`section_value`,`value`),
  KEY `hidden_aro` (`hidden`),
  KEY `#__gacl_hidden_aro` (`hidden`)
) TYPE=MyISAM;


改成了
CREATE TABLE `#__core_acl_aro` (
  `aro_id` int(11) NOT NULL auto_increment,
  `section_value` varchar(160) NOT NULL default '0',
  `value` varchar(160) NOT NULL default '',
  `order_value` int(11) NOT NULL default '0',
  `name` varchar(255) NOT NULL default '',
  `hidden` int(11) NOT NULL default '0',
  PRIMARY KEY  (`aro_id`),
  UNIQUE KEY `section_value_value_aro` (`section_value`,`value`),
  UNIQUE KEY `#__gacl_section_value_value_aro` (`section_value`,`value`),
  KEY `hidden_aro` (`hidden`),
  KEY `#__gacl_hidden_aro` (`hidden`)
) TYPE=MyISAM;
posted @ 2007-05-21 08:04 sosopro 阅读(505) | 评论 (2)编辑 收藏
PHP 的安装

由于php是一个zip文件(非install版),安装较为简单
解压就行。把解压的 php5.2.1-Win32重命名为 php5。并复制到安装盘目录下。例如安装路径为 c:\php5
1  找到php目录下的 php.ini-dist或 php.ini.recommended文件,重命名为 php.ini,并复制到系统盘的windows目录下(以c:\windows为例,2000是在winnt目录下,下面都采用网友的方法来说明).

2  再把php目录下的php5ts.dll,libmysql.dll复制到目录 c:\windows\system32下。

3  把php5\ext目录下的php_gd2.dll,php_mysql.dll,php_mbstring.dll文件复制到c:\windows\system32下
如果没有加载 php_gd2.dll  php将不能处理图像。没有加载php_mysql.dll php将不支持mysql函数库  php_mbstring.dll在后面使用phpmyadmin时支持宽字符
所有东西安装完成后我们再进行配置

配置php并关联MySQL
打开c:\windows\php.ini文件
1 设置扩展路径
查找 extension_dir 有这么一行
extension_dir = "./"
将此行改成
extension_dir = "C:\php5\ext"
其中C:\php5是你安装php的路径。路径不正确将无法加载dll
(注意:有些php版本是 ;extension_dir = "./" 要把前面的分号去掉)

2 查找 extension
extension=php_mbstring.dll
extension=php_gd2.dll
extension=php_mysql.dl
把上面3项前面的分号去掉,这样apache启动时就可以加载这些dll了
当然前面我们也把这些dll复制到system32下了l

3 设置会话保存路径
查找session.save_path 有这么一行
;     session.save_path = "N;/path"
在此行后加入一行(注意是加入一行,不是加到后面)
session.save_path = "C:\WINDOWS\Temp"
保存到你的临时目录下,这里完全可以保存到windows临时目录Temp下

4 还有比较值得注意的是 short_open_tag 默认是Off的
也就是说 php不能使用短标记如 <? ?> 必须使用<?php ?>
由于短标记使用方便,并且很多程序也是用短短标记来写,如discuz等
如果不把 short_open_tag 改成On将出现的症状将很难判断是上面原因,这里建议修改
查找
short_open_tag = Off
改为
short_open_tag = On

5 是否显示错误 display_errors
出于安全性考虑,display_errors 也默认为 Off
就是说在调试时,如果php代码有误,就只出现一个空白页。而不会显示出错原因和出错行数。
这样调试起来将非常不便,建议根据自己需要修改
查找
display_errors = Off           (注意不是 ; - display_errors = Off           [Security])
改成
display_errors = On

6 register_globals
出于安全性考虑它默认也是Off
当register_globals=Off的时候,下一个程序接收的时候应该用$_POST['user_name']和$_POST['user_pass'])
当register_globals=On的时候,下一个程序可以直接使用$user_name和$user_pass来接受值。
更详细的说明请参考
http://www.phpfans.net/bbs/archiver/?tid-234.htm
建议根据自己需要修改

7 php5时差问题
<?php echo date("Y-m-d H:i:s");?>时间相差八小时
为什么呢?PHP5系列版本新增了时区设置,默认为格林威治时间,与中国所在的东8区正好相差8个小时
查找date.timezone有这么一行
;date.timezone =
将;去掉,改成
date.timezone = PRC
其中PRC:People's Republic of China 中华人民共和国,
更详细解决方法请参考本论坛的
http://www.phpfans.net/bbs/archiver/?tid-60.html
更多文章 php爱好者站 http://www.phpfans.net/

Apache整合PHP

1 从开始菜单打开apache配置文档

2 修改网站根目录
查找 DocumentRoot有这么一行
DocumentRoot"C:/Program Files/Apache Group/Apache2/htdos"
这就是你网站的根目录,你可以修改,也可以用默认的.如果改,还要修改下面这项,否则可能会出现 403 错误
查找  This should be changed to whatever you set DocumentRoot to
在它下面两行有
<Directory "C:/Program Files/Apache Group/Apache2/htdocs">
把上面两项的 C:/Program Files/Apache Group/Apache2/htdos 改成你想要的目录

3 查找  DirectoryIndex index.html index.html.var
修改成
DirectoryIndex index.html index.html.var  index.php
这样index.php 可以充当默认页面了

4 Apache中模块化安装php
查找 # LoadModule foo_module modules/mod_foo.so
在此行后加入一行
LoadModule php5_module C:/php5/php5apache2.dll

其中C:/php5/php5apache2.dll是你安装php的相应路径.
注意不要把php5apache2.dll和php5apache.dll混淆.php5apache.dll只适用于apache 版本1的.
注意: PHP5压缩包里的php5apache2.dll只适用于apache2.0.*版本,如果是2.2.*以上版本,就可能会出现
"Cannot load C:/php/php5apache2.dll into server: The specified module could not be found."
或者:
"The requested operation has failed"
的情况.关于这个问题的解决方法可以参考本论坛的
http://www.phpfans.net/bbs/viewthread.php?tid=857&extra=page%3D1

5 查找 AddType application/x-gzip .gz .tgz
在此行后加入一行
AddType application/x-httpd-php .php
这样apache就可以解释php文件了
到这里配置基本完成了

########重启apache#########

在网站根目录下创建一个 phpinfo.php 文件

<?php
phpinfo();
?>

在浏览器打开
http://localhost/phpinfo.php
如果出现如下信息,则说明php已经配置好了


下面再测试php和mysql数据库的关联
在网站根目录下创建一个test.php 文件
CODE:
[Copy to clipboard]
<?php
$link
=mysql_connect("localhost","root","12345");  //12345改成你的mysql密码
if(!$link) echo "失败!";
else echo 
"成功!";
mysql_close();
?> 

在浏览器打开 http://localhost/test.php
如果输出成功,则说明大功告成了.

安装 phpMyAdmin

下载得到 phpMyAdmin-2.7.0.zip,将其解压到 你网站根目录下并重命名为phpMyAdmin,
找到并打开 config.defaut.php (有些版本是config.inc.php或者 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/

下面这两项项根据自己需要的编码修改(如果对数据库编码不是很熟悉的建议不要修改)
3 搜索 $cfg['DefaultLang'],将其设置为 zh-gb2312 ;
4 搜索 $cfg['DefaultCharset'],将其设置为 gb2312 ;

打开浏览器,输入:http://localhost/phpMyAdmin/,Apache 和 MySQL 均已启动,
如果出现如下页面则phpmyadmin安装完成并可以使用了

phpMyAdmin 的具体功能,请慢慢熟悉,这里不再赘述。

本人综合小结:

1、安装目录尽量用英文来命名,文件也是一样(谁叫咱中国落后呢)

2、apache是提供web服务,MYSQL数据库连接方面本人并未验证,我是用一个PHPWIND论坛直接安装,证明连接是成功的,php等最好上官方网站下。(我先是用了个不知道从哪个地方下的PHP5.2.1,结果少了个文件,总是说模块无法加载,弄了半天才发现,郁闷)

3、本人系统是在D下的2000服务器版本,因此,c:\windows通通改成d:\winnt,大家这个应该明白吧。

4、补充下,在iis下配置PHP更加简单:

Windows 2000下PHP+IIS的安装方法

<1>、把php-5.0.0(若有新版,推荐使用)-Win32.zip解压放到C:\php。

<2>、将php.ini-dist复制到Winnt目录下并改名为php.ini,复制php5ts.dll和libmysql.dll到WINNTsystem32中。

<3>、接下来在IIS中进行设置,打开默认站点属性对话框,切换到“主目录”选项卡,然后点“配置”按钮打开“应用程序配置对话框”,点“添加”按钮打开 “添加/编辑应用程序扩展名映射”对话框。在“可执行文件”输入框中,指向c:/php/php5isapi.dll,在“扩展名”输入框里面输入 “.php”(不包括引号),并选中“脚本引擎”和“检查文件是否存在”两个复选框,一路确定并退出IIS。

至此服务器应该已经能够同时支持asp和php了。

下面对php.ini进行配置让php支持MYSQL和GD库

<1>、在记事本中查找“extension_dir”,然后把
extension_dir = "./"
修改为
extension_dir = "C:\php\ext"

<2>、在记事本中查找“;extension=php_mysql.dll”和“;extension=php_gd2.dll”,然后把前面的“;”去掉,即把
;extension=php_mysql.dll
改为
extension=php_mysql.dll


;extension=php_gd2.dll
改为
extension=php_gd2.dll

<3>、保存好php.ini,然后重起IIS即可




php5.12+apache2.054+mysql5.0 window xp下安装手记

1、安装apache

  apache_2.0.54-win32-x86-no_ssl,很easy的,一路next就ok了。安装完毕,打开安装目录下的\htdocs文件夹,修改里面任何一个文件后缀改为htm即可以。

  打开http://localhost检查是否安装成功。

2、安装php5

  解压php-5.1.2-Win32到目录到c:\php,将目录下的php5ts.dll copy到c:\windows目录下。

复制 c:\PHP 目录下的下列 dll 文件于 C:\windowssystem32 目录下:
  fdftk.dll
  fribidi.dll
  gds32.dll
  libeay32.dll
  libintl-1.dll
  libmhash.dll
  libmysql.dll
  libmysqli.dll
  ntwdblib.dll
  ntwdblib.dll
  yaz.dll
  其中 libmysql.dll 为 MySQL 4.1 之前版本的扩展支持,libmysqli.dll 为 MySQL 4.1 之后版本的扩展支持。因为我上面下载的是 MySQL 4.0.20 ,所以其实复制 libmysql.dll 即可。
复制 C:\PHP 目录下的 php.ini-dist 文件到 C:\windows 目录下,并改名为 php.ini ,并用记事本打开编辑:
  定位到下面两行:
; Directory in which the loadable extensions (modules) reside.
extension_dir = "./"
  修改下面一行使它指向 c:\PHPext 目录,修改后如下:
; Directory in which the loadable extensions (modules) reside.
extension_dir = "c:\PHP\ext"

把;extension=php_mysql.dll前的;去掉

3、修改apache 目录下的 httpd.conf 文件,定位到下面这行:
DirectoryIndex index.html index.html.var
在其后面添加一个 PHP 默认页,通常是 index.php ,如下:
DirectoryIndex index.html index.html.var index.php
为了使 Apache 识别 PHP 的相关扩展名,搜索并定位到下面这个部分:
<Directory "c:/apache/Apache2/cgi-bin">
AllowOverride None
Options None
Order allow,deny
Allow from all
</Directory>

在后面添加如下两行:
AddType application/x-httpd-php .php .phtml .php3 .php4
AddType application/x-httpd-php-source .phps
指定 php 模块,找到并定位到如下这行:
#LoadModule ssl_module modules/mod_ssl.so
在下面添加一行:

LoadModule php5_module c:\PHP\php5apache2.dll
  使它指向 PHP5 目录下的 php5apache2.dll 文件,路径一定要准确。
如果要禁止目录浏览,查找并定位到下面这几行:

Options Indexes FollowSymLinks
去掉几行注释下面进跟着的一行的 Indexes 即可,修改后:
Options FollowSymLinks

  OK,保存 httpd.conf 文件后重起 Apache 服务器。

写个PHP测试文件~OK~!

3、安装mysql-5.0.0-alpha-win,一路NEXT~~ok啦!
posted @ 2007-05-21 04:23 sosopro 阅读(3513) | 评论 (1)编辑 收藏
原文连接:http://blog.chinaunix.net/u/2190/showart.php?id=199674


开篇注释:以下文字并没有非常多的技术词汇,所以只要对PHP感兴趣的人都可以看看。

PHPer是草根吗?

从PHP诞生之日起,PHP就开始在Web应用方面为广大的程序员服务。同时,作为针对Web开发量身定制的脚本语言,PHP一直秉承简单、开源的思想,这也使得PHP得以快速的发展,并且大力地推动Web2.0的出现与发展。但是,长期以来,PHPer(PHP Programmers)被认为是处于草根阶层的程序员,被认为是技术含量少,层次低的程序员。这点在国内尤其突出。

记得一个技术主管说过这样一个事情。他给一个程序员分配了PHP的开发任务,没想到那个程序员居然说:“我是学Java出身的,你让我去写PHP,你这不是在贬低我吗?”。这件事情给我印象很深、触动也很大。虽然这不能代码大部分程序员的看法,但是这么认为的人应该不少。还有人说,现在如果是大型的政府项目,PHP是肯定不会被列入考虑的范围之内的。

那么为什么PHPer会被认为是草根阶层,是因为它很简单,人人都可以学会,所以没什么难度吗?我以前也是这么认为。PHP入门很快,处理文件,数据,远程连接,网络编程都非常方便,官方也有这样的说法:PHP学习的成本很低,所以你容易去使用它。这个想法也是普遍的,甚至大部分的PHPer自己都这样认为。

说到这里,我想大家就会想到我为什么要写这些文字。因为一年多的PHP推广工作让我了解到许许多多的使用PHP的公司的大概情况。在这些过程中我慢慢体会到其中的根本原因。这里我说是根本原因虽然是个人的看法,但是我觉得事实就是如此。

那么为什么PHPer会被看成草根阶层,根本原因是PHPer所作的事情(通过代码实现)的绝大部分都是表现层的东西,这个熟悉PHP的人都知道。当然也会有PHP会说他用MVC结构编写的某某框架具备的如何如何的功能。但是这些还是表现层。所以只会处理表现层的程序员就被看成草根阶层了。事实上也是如此,因为这种情况下PHP确实很难构造大型的应用。

这就找到原因了,不是的。为什么PHPer总是在负责表现层的东西呢。答案是底层的数据处理(Web应用就是数据存储和查找)我们一般不去触及!好,那么说到这里有些人可能已经想到了,那不就是数据库吗!对,就是数据库!让PHPer一直当草根的元凶就是数据库。为什么?

因为目前流行的web架构中,前端是负载均衡系统,中间是web服务器,后面是数据库服务器。所以,大部分PHPer工作在Web服务器层面。因为数据库已经很好地为我们组织数据了。所以PHP中没有太多的算法,而且大家潜意识下也觉得不需要,更何况会影响性能。

这种情况下,PHPer就成为了数据库使用者,他总是在操作数据库。而不是在做程序。一个最简单的PHP脚本就是,连接数据库,把数据取出来,然后用命令输出到浏览器。整个过程不超过10行代码。给人的感觉就是太简单了。没有任何技术含量。为什么了,因为数据处理部分都已经被数据库做完了。尤其是MySQL的使用!MySQL是免费的,所以大多数程序员可以自由地使用它,另外MySQL的速度够快了,所以做个PHP应用程序非常的简单。这就相当于给你枪以后你觉得没有必要学习武功一样。当然,我不是说枪没有武工好。而是说,枪的出现,小孩都可以轻松便捷地杀人了。

我们再详细说说为什么是数据库!这里我说一个例子。我去过北京一家非常著名的网站,当时我们还有一个比较资深的PHP程序员在那说些系统架构的事情。我记得当时那个程序员问大家一个数据结构中的算法问题的时候,全场没有一个人能答得出来(包括我)。然后那个程序员就开始给大家讲些很基础的数据结构的东西了。让我一下子回想到大学时候学的数据结构课。而这些基础的数据排序、查找、传递的问题在其他高级语言(比如C)是非常普遍的。但是在PHP没有! PHPchina.com的论坛也有个板块叫PHP的数据结构和算法。这个板块的帖子也是寥寥无几。

仔细回想下,目前网络上大家讨论的最多的是两个方面的问题。一个是PHP的类的使用(处理过程的封装),还有一个是开发框架问题。但是我们仔细分析的话,发现这些所谓的PHP中比较复杂的概念里面没有数据处理!为什么,有数据库!用一个Adodb或者PHP5的PDO就可以搞定了!真的搞定了吗?不是,这些无非是在连接数据库,没有数据处理!所以PHPer似乎就没有什么可以拿出台面上的东西。

再说一个具体的代码问题,无级分类。这个概念我想大家都不会陌生了吧。我见过两种处理方式。第一个是地道的PHPer的处理方式,也是目前比较流行的。就是用数据库来处理。而且字段很少,只需要加个父类的字段并加以判断就行了。而且这个方法很实用。效率也高!但是这个不是数据处理的范畴了,而是数据库的查找!

第二个是C程序员用PHP写出来的,他把所有的分类信息都从数据库取出来,然后用数据结构算法进行排列分布,然后输出。

这里我们不对这两种方式的效率进行对比,我想大家都有各自的想法。但是我想说明一个问题,就是这两种做法的本质的区别。PHPer习惯性地用数据库来处理,而且有很巧的处理方式,效率也很高!这种方式就是数据库查询。而第二种方法是比较有特点的。他认为数据库就是存放数据的地方,具体的逻辑处理还要靠自己的逻辑。

因此,结论是第二种方法的使用者觉得自己强些,因为数据的逻辑是他组织的!并且觉得PHPer的那种做法无非就是会查询数据库罢了。所以他认为PHPer是草根级的,只懂得操作数据库和排列页面(smarty搞搞那种)。

说到这里,我想大家都已经回忆了不少自己平时用PHP做开发的经历了吧,是否发现大家确实都在操作数据库呢。

那么我们来讨论下这个问题。数据库不好吗?为什么我一直用数据库处理数据都没有问题。我要说的是数据库是有问题的,而且有很大的问题!当然这里我并不是说不能用数据库,也不是在贬低数据库的性能。而是,我们没有充分认识到数据库所起到的作用。

我的想法源起于这样一个事情,有一次一个网站的技术总监问我,为什么他们的网站那么慢,要怎么办。当时,我的MSN里Zend总部的工程师正好在线,我就问他PHP响应比较慢了,怎么办?他当时直接告诉我,数据库问题!肯定是数据库没有优化设计好。所以,我没有给那个技术总监确切的答案了,因为他们的数据库设计我们是不能涉及的。所以就给了大概的数据库优化的建议。这样的事情屡次发生,我就开始怀疑,为什么Zend总部的工程师每次都跟我说是数据库的问题呢,难道我们不能从PHP层面来解决这个问题吗?答案是不能!因为PHP目前的运行速度已经是很快了,通过Zend的性能分析也能看到一个用户的点击,PHP的运行时间只有10%不到,那PHP在干吗?它在等。等数据库的查询结果。这个方面在目前的PHP产品中有了很大的提高,那就是Caching和网页静态化两个方案。Caching可能大家会比较陌生,但是网也静态化现在连PHP产品的用户都非常清楚了。速度快、容易被搜索到等等,好处不言而喻。开玩笑地说,现在网站的主页实现网页静态化只需要硬盘足够大。J至于Caching就比较复杂些,也是大多数PHPer感到头疼的地方。甚至于有些人会用C来实现。因为Caching中的数据有效期验证、查找、提取、更新等等都是比较难处理。当然,也有人会用数据库来处理 Caching问题。

所以,当访问量激增的时候,PHP架构的网站会出现的很多问题都因数据库而起。数据库的同步问题还不算什么。关键是数据库的响应速度会有指数级的降低。这个问题我在10月23号LAMP发布会的时候问过MySQL的副总裁。他当时也没有给我比较完美的答案(这也我的意料之中),因为数据库总会有瓶颈的,除非是神仙数据库,哈哈!

这里有个题外话,LAMP大会的时候我跟Yahoo的一个技术高管聊的时候,我问他Yahoo在选择MySQL还是Oracle的时候是怎么考虑,他的答案令我非常惊讶。他说大部分的时候我们是会用MySQL的,因为它的性能已经达到我们的要求。但是什么时候我们会选用Oracle呢,就是当我们需要存储收费用户的数据的时候。我就问为什么,难道Oracle比MySQL稳定吗?他说,这个倒没有特别考虑。关键是如果使用Oracle的话,当出现问题的时候我们可以找到负责人,Oracle会负责事故的处理,但是如果用MySQL的话,我们找谁去?

所以,我们对数据库的看法应该纠正过来,就是说数据库不是万能的。如果有实力的话自己开发数据库。听说Google就是那样的。

那么我们怎么看待数据库呢?我个人的理解是数据库只是用来降低开发成本的手段。因为采用数据库以后我们不需要考虑数据的存储,尤其是排序和查找。但是这会带来什么问题呢?就是当业务膨胀的时候,数据库就成为瓶颈了!这个时候问题就会非常棘手!因为这个是底层的数据处理。牵一发而动全身。

所以我认为正确的观点是,数据库是一个数据备份机!怎么理解,我们只需要保证数据的存储有效性就行了。而这本来就是数据库的核心功能,只不过因为数据库的方便的排序等功能让大家把过多的处理都交给数据库来操作了。一个用户的点击PHP就把一大堆的任务交给数据库,然后把结果排列下给用户就完事了。这对数据库是不公平的!也是因此大家开始抱怨数据库的性能了。

针对这个观点,我们再举个例子,有一次我去拜访一个大型的网络公司(基本上国内只要上过互联网的都知道),他们使用PHP很少,但是我了解到他们其它业务是怎么使用数据库。他们自豪地跟我介绍说他们在数据库的外围有个第二数据库(我这里起名叫第二数据库)。为什么叫第二数据库呢,原来它是一个缓存系统。那么开发工程师怎么去这个缓存系统获取数据呢?那个技术总监自豪地说,他们这个缓存系统由SQL查询语句!我当时很惊讶,但是后来想想确实需要这个。因为当你的缓存系统达到一定量级的时候从缓存获取数据都非常复杂,干脆写个SQL查询语句让缓存系统分析、处理并返回数据。而且他们告诉我,在他们那里,就算是用PHP的话也是让PHP去那个缓存系统读取数据。

所以说,如果你能处理好这样的问题的话,把数据存放在数据库,然后数据库只起到备份的作用。然后你用自己的中间层来处理分析数据,效果是90%以上的用户访问不访问数据库。有人就会说了,这不就类似连接池的东西吗?是的!因为数据库的瓶颈是无法解决的,我们只能在Web服务器和数据库中间加个中间层来做缓冲。

可能大家会说了,切,这个我们早就知道了!那好,这里我要说的是它引发的两点思考:

第一, 有些语言已经有连接池技术的基础上,那些程序员可以方便地使用连接池而构建大型应用。那么如果他们认为PHPer只会是用数据库,那么我们是不是可以说他们只会是用连接池呢?连接池和数据库在这个概念上有何区别?

第二,当PHPer开始构建自己的缓存系统的时候,他是不是突破了PHPer只会是用数据库的层次?因为他参与了数据逻辑的处理工作。那么他还是草根吗?

最后,新一代的PHPer是草根吗?

posted @ 2006-11-16 17:02 sosopro 阅读(1193) | 评论 (4)编辑 收藏

在linux中的每一个文件或目录都包含有访问权限,这些访问权限决定了谁能访问和如何访问这些文件和目录。

通过设定权限可以从以下三种访问方式限制访问权限:只允许用户自己访问;允许一个预先指定的用户组中的用户访问;允许系统中的任何用户访问。同时,用户能够控制一个给定的文件或目录的访问程度。一个文件活目录可能有读、写及执行权限。当创建一个文件时,系统会自动地赋予文件所有者读和写的权限,这样可以允许所有者能够显示文件内容和修改文件。文件所有者可以将这些权限改变为任何他想指定的权限。一个文件也许只有读权限,禁止任何修改。文件也可能只有执行权限,允许它想一个程序一样执行。

三种不同的用户类型能够访问一个目录或者文件:所有着、用户组或其他用户。所有者就是创建文件的用户,用户是所有用户所创建的文件的所有者,用户可以允许所在的用户组能访问用户的文件。通常,用户都组合成用户组,例如,某一类或某一项目中的所有用户都能够被系统管理员归为一个用户组,一个用户能够授予所在用户组的其他成员的文件访问权限。最后,用户也将自己的文件向系统内的所有用户开放,在这种情况下,系统内的所有用户都能够访问用户的目录或文件。在这种意义上,系统内的其他所有用户就是other用户类。

每一个用户都有它自身的读、写和执行权限。第一套权限控制访问自己的文件权限,即所有者权限。第二套权限控制用户组访问其中一个用户的文件的权限。第三套权限控制其他所有用户访问一个用户的文件的权限,这三套权限赋予用户不同类型(即所有者、用户组和其他用户)的读、写及执行权限就构成了一个有9种类型的权限组。

我们可以用-l参数的ls命令显示文件的详细信息,其中包括权限。如下所示:

[root@localhost ~]# ls -lh
总用量 368K
-rw-r--r-- 1 root root 12K 8月 15 23:18 conkyrc.sample
drwxr-xr-x 2 root root 48 9月 4 16:32 Desktop
-r--r--r-- 1 root root 325K 10月 22 21:08 libfreetype.so.6
drwxr-xr-x 2 root root 48 8月 12 22:25 MyMusic
-rwxr-xr-x 1 root root 9.6K 11月 5 08:08 net.eth0
-rwxr-xr-x 1 root root 9.6K 11月 5 08:08 net.eth1
-rwxr-xr-x 1 root root 512 11月 5 08:08 net.lo
drwxr-xr-x 2 root root 48 9月 6 13:06 vmware

当执行ls -l 或 ls -al 命令后显示的结果中,最前面的第2~10个字符是用来表示权限。第一个字符一般用来区分文件和目录:

    d:表示是一个目录,事实上在ext2fs中,目录是一个特殊的文件。
    -:表示这是一个普通的文件。
    l: 表示这是一个符号链接文件,实际上它指向另一个文件。
    b、c:分别表示区块设备和其他的外围设备,是特殊类型的文件。
    s、p:这些文件关系到系统的数据结构和管道,通常很少见到。

下面详细介绍一下权限的种类和设置权限的方法。


二、一般权限

第2~10个字符当中的每3个为一组,左边三个字符表示所有者权限,中间3个字符表示与所有者同一组的用户的权限,右边3个字符是其他用户的权限。这三个一组共9个字符,代表的意义如下:
r(Read,读取):对文件而言,具有读取文件内容的权限;对目录来说,具有浏览目 录的权限。
w(Write,写入):对文件而言,具有新增、修改文件内容的权限;对目录来说,具有删除、移动目录内文件的权限。
x(eXecute,执行):对文件而言,具有执行文件的权限;对目录了来说该用户具有进入目录的权限。
-:表示不具有该项权限。

下面举例说明:

      -rwx------: 文件所有者对文件具有读取、写入和执行的权限。
      -rwxr—r--: 文件所有者具有读、写与执行的权限,其他用户则具有读取的权限。
      -rw-rw-r-x: 文件所有者与同组用户对文件具有读写的权限,而其他用户仅具有读取和执行的权限。
      drwx--x--x: 目录所有者具有读写与进入目录的权限,其他用户近能进入该目录,却无法读取任何数据。
      Drwx------: 除了目录所有者具有完整的权限之外,其他用户对该目录完全没有任何权限。

每个用户都拥有自己的专属目录,通常集中放置在/home目录下,这些专属目录的默认权限为rwx------:
[root@localhost ~]# ls -al
总用量 5
drwxr-xr-x 9 root root 240 11月 8 18:30 .
drwxr-xr-t 22 root root 568 10月 15 09:13 ..
drwxr-xr-x 2 root root 48 8月 11 08:09 ftp
drwxrwxrwx 2 habil users 272 11月 13 19:13 habil
-rw-r--r-- 1 root root 0 7月 31 00:41 .keep
drwxr-xr-x 2 root root 72 11月 3 19:34 mp3
drwxr-xr-x 39 sailor users 1896 11月 11 13:35 sailor
drwxr-xr-x 3 temp users 168 11月 8 18:17 temp
drwxr-xr-x 3 test users 200 11月 8 22:40 test
drwxr-xr-x 65 wxd users 2952 11月 19 18:53 wxd

表示目录所有者本身具有所有权限,其他用户无法进入该目录。执行mkdir命令所创建的目录,其默认权限为rwxr-xr-x,用户可以根据需要修改目录的权限。

此外,默认的权限可用umask命令修改,用法非常简单,只需执行umask 777 命令,便代表屏蔽所有的权限,因而之后建立的文件或目录,其权限都变成000,依次类推。通常root帐号搭配umask命令的数值为022、027和 077,普通用户则是采用002,这样所产生的权限依次为755、750、700、775。有关权限的数字表示法,后面将会详细说明。
用户登录系统时,用户环境就会自动执行rmask命令来决定文件、目录的默认权限。


三、特殊权限

其实文件与目录设置不止这些,还有所谓的特殊权限。由于特殊权限会拥有一些“特权”,因而用户若无特殊需求,不应该启用这些权限,避免安全方面出现严重漏洞,造成黑客入侵,甚至摧毁系统!!!
s或S(SUID,Set UID):可执行的文件搭配这个权限,便能得到特权,任意存取该文件的所有者能使用的全部系统资源。请注意具备SUID权限的文件,黑客经常利用这种权限,以SUID配上root帐号拥有者,无声无息地在系统中开扇后门,供日后进出使用。
s或S(SGID,Set GID):设置在文件上面,其效果与SUID相同,只不过将文件所有者换成用户组,该文件就可以任意存取整个用户组所能使用的系统资源。
T或T(Sticky):/tmp和 /var/tmp目录供所有用户暂时存取文件,亦即每位用户皆拥有完整的权限进入该目录,去浏览、删除和移动文件。

因为SUID、SGID、Sticky占用x的位置来表示,所以在表示上会有大小写之分。加入同时开启执行权限和SUID、SGID、Sticky,则权限表示字符是小写的:

     -rwsr-sr-t 1 root root 4096 6月 23 08:17 conf

如果关闭执行权限,则表示字符会变成大写:
     -rwSr-Sr-T 1 root root 4096 6月 23 08:17 conf


四、使用文件管理器来改变文件或目录的权限:

如果用户要改变一个文件目录的权限,右击要改变权限的文件或者目录,在弹出的快捷菜单中选择“属性”,系统将打开属性对话框

在“属性”对话框中,单击“权限”标签,就会打开“权限”选项卡。

在这里你可以修改文件或者目录的所有者、组群和其他用户的权限,而且可以设置特殊权限

对于特殊权限,最好不要设置,不然会带来很严重的安全问题。

当然,在这里你也可以改变文件和目录的所有者和所属组。


五、使用chmod和数字改变文件或目录的访问权限

文件和目录的权限表示,是用rwx这三个字符来代表所有者、用户组和其他用户的权限。有时候,字符似乎过于麻烦,因此还有另外一种方法是以数字来表示权限,而且仅需三个数字。

     r: 对应数值4
     w: 对应数值2
     x:对应数值1
     -:对应数值0

  数字设定的关键是mode的取值,一开始许多初学者会被搞糊涂,其实很简单,我们将rwx看成二进制数,如果有则有1表示,没有则有0表示,那么rwx r-x r- -则可以表示成为:
  111 101 100
  再将其每三位转换成为一个十进制数,就是754。
  例如,我们想让a.txt这个文件的权限为:
   自己 同组用户 其他用户
  可读 是 是 是
  可写 是 是
    可执行

  那么,我们先根据上表得到权限串为:rw-rw-r--,那么转换成二进制数就是110 110 100,再每三位转换成为一个十进制数,就得到664,因此我 们执行命令:
[root@localhost ~]# chmod 664 a.txt

按照上面的规则,rwx合起来就是4+2+1=7,一个rwxrwxrwx权限全开放的文件,数值表示为777;而完全不开放权限的文件“---------”其数字表示为000。下面举几个例子:
-rwx------:等于数字表示700。
-rwxr—r--:等于数字表示744。
-rw-rw-r-x:等于数字表示665。
drwx—x—x:等于数字表示711。
drwx------:等于数字表示700。

在文本模式下,可执行chmod命令去改变文件和目录的权限。我们先执行ls -l 看看目录内的情况:
[root@localhost ~]# ls -l
总用量 368
-rw-r--r-- 1 root root 12172 8月 15 23:18 conkyrc.sample
drwxr-xr-x 2 root root 48 9月 4 16:32 Desktop
-r--r--r-- 1 root root 331844 10月 22 21:08 libfreetype.so.6
drwxr-xr-x 2 root root 48 8月 12 22:25 MyMusic
-rwxr-xr-x 1 root root 9776 11月 5 08:08 net.eth0
-rwxr-xr-x 1 root root 9776 11月 5 08:08 net.eth1
-rwxr-xr-x 1 root root 512 11月 5 08:08 net.lo
drwxr-xr-x 2 root root 48 9月 6 13:06 vmware

可以看到当然文件conkyrc.sample文件的权限是644,然后把这个文件的权限改成777。执行下面命令

[root@localhost ~]# chmod 777 conkyrc.sample

然后ls -l看一下执行后的结果:
[root@localhost ~]# ls -l
总用量 368
-rwxrwxrwx 1 root root 12172 8月 15 23:18 conkyrc.sample
drwxr-xr-x 2 root root 48 9月 4 16:32 Desktop
-r--r--r-- 1 root root 331844 10月 22 21:08 libfreetype.so.6
drwxr-xr-x 2 root root 48 8月 12 22:25 MyMusic
-rwxr-xr-x 1 root root 9776 11月 5 08:08 net.eth0
-rwxr-xr-x 1 root root 9776 11月 5 08:08 net.eth1
-rwxr-xr-x 1 root root 512 11月 5 08:08 net.lo
drwxr-xr-x 2 root root 48 9月 6 13:06 vmware

可以看到conkyrc.sample文件的权限已经修改为rwxrwxrwx

如果要加上特殊权限,就必须使用4位数字才能表示。特殊权限的对应数值为:

     s或 S (SUID):对应数值4。
     s或 S (SGID):对应数值2。
     t或 T :对应数值1。
<code>
用同样的方法修改文件权限就可以了
例如:
<code>
[root@localhost ~]# chmod 7600 conkyrc.sample
[root@localhost ~]# ls -l
总用量 368
-rwS--S--T 1 root root 12172 8月 15 23:18 conkyrc.sample
drwxr-xr-x 2 root root 48 9月 4 16:32 Desktop
-r--r--r-- 1 root root 331844 10月 22 21:08 libfreetype.so.6
drwxr-xr-x 2 root root 48 8月 12 22:25 MyMusic
-rwxr-xr-x 1 root root 9776 11月 5 08:08 net.eth0
-rwxr-xr-x 1 root root 9776 11月 5 08:08 net.eth1
-rwxr-xr-x 1 root root 512 11月 5 08:08 net.lo
drwxr-xr-x 2 root root 48 9月 6 13:06 vmware

加入想一次修改某个目录下所有文件的权限,包括子目录中的文件权限也要修改,要使用参数-R表示启动递归处理。

例如:

[root@localhost ~]# chmod 777 /home/user 注:仅把/home/user目录的权限设置为rwxrwxrwx
[root@localhost ~]# chmod -R 777 /home/user 注:表示将整个/home/user目录与其中的文件和子目录的权限都设置为rwxrwxrwx


六、使用命令chown改变目录或文件的所有权

文件与目录不仅可以改变权限,其所有权及所属用户组也能修改,和设置权限类似,用户可以通过图形界面来设置,或执行chown命令来修改。

我们先执行ls -l看看目录情况:

[root@localhost ~]# ls -l
总用量 368
-rwxrwxrwx 1 root root 12172 8月 15 23:18 conkyrc.sample
drwxr-xr-x 2 root root 48 9月 4 16:32 Desktop
-r--r--r-- 1 root root 331844 10月 22 21:08 libfreetype.so.6
drwxr-xr-x 2 root root 48 8月 12 22:25 MyMusic
-rwxr-xr-x 1 root root 9776 11月 5 08:08 net.eth0
-rwxr-xr-x 1 root root 9776 11月 5 08:08 net.eth1
-rwxr-xr-x 1 root root 512 11月 5 08:08 net.lo
drwxr-xr-x 2 root root 48 9月 6 13:06 vmware

可以看到conkyrc.sample文件的所属用户组为root,所有者为root。

执行下面命令,把conkyrc.sample文件的所有权转移到用户user:

[root@localhost ~]# chown user conkyrc.sample
[root@localhost ~]# ls -l
总用量 368
-rwxrwxrwx 1 user root 12172 8月 15 23:18 conkyrc.sample
drwxr-xr-x 2 root root 48 9月 4 16:32 Desktop
-r--r--r-- 1 root root 331844 10月 22 21:08 libfreetype.so.6
drwxr-xr-x 2 root root 48 8月 12 22:25 MyMusic
-rwxr-xr-x 1 root root 9776 11月 5 08:08 net.eth0
-rwxr-xr-x 1 root root 9776 11月 5 08:08 net.eth1
-rwxr-xr-x 1 root root 512 11月 5 08:08 net.lo
drwxr-xr-x 2 root root 48 9月 6 13:06 vmware

要改变所属组,可使用下面命令:
[root@localhost ~]# chown :users conkyrc.sample
[root@localhost ~]# ls -l
总用量 368
-rwxrwxrwx 1 user users 12172 8月 15 23:18 conkyrc.sample
drwxr-xr-x 2 root root 48 9月 4 16:32 Desktop
-r--r--r-- 1 root root 331844 10月 22 21:08 libfreetype.so.6
drwxr-xr-x 2 root root 48 8月 12 22:25 MyMusic
-rwxr-xr-x 1 root root 9776 11月 5 08:08 net.eth0
-rwxr-xr-x 1 root root 9776 11月 5 08:08 net.eth1
-rwxr-xr-x 1 root root 512 11月 5 08:08 net.lo
drwxr-xr-x 2 root root 48 9月 6 13:06 vmware

要修改目录的权限,使用-R参数就可以了,方法和前面一样。





from linuxsir.org

posted @ 2006-08-09 16:37 sosopro| 编辑 收藏
tar -zxvf php-4.2.3.tar.gz
mv php-4.2.3.tar.gz php
cd php
./configure --prefix=/usr/local/php --with-apxs=/usr/local/apache/bin/apxs --with-config-file-path=/usr/local/lib --enable-track-vars --with-xml --with-mysql
make
make install
cp php.ini-dist /usr/local/lib/php.ini

以dso方式安装php至/usr/local/php 设置配置文件目录为/usr/local/lib 开启mysql,xml支持

这要注意:--with-apxs选项如果是apache2那么要改为--with-apxs2
同时在ubuntu下需要安装flex。xml需要安装libxml2,都是apt安装了

还需要mysql.h文件,这个东西如果你的mysql是apt安装的,估计找不到,你可以到mysql的官方网站去,下一个libmysqlclient,就ok了

最后,一定要注意权限问题:比如说你的网帐目录是/opt/apache2/htdocs,那么一定要修改这个目录和该目录下文件的权限,不然linux不让你执行!



posted @ 2006-08-08 15:41 sosopro 阅读(3271) | 评论 (0)编辑 收藏
最近看到好多报道,IBM和ORACLE好像都要对php做出支持,当然我没用过zend公司的framework不知道好坏,IBM有eclipse,所以phper有福了。其实很长时间下来我们或许已经习惯了editplus,emacs或其他,然而有个大公司支持做IDE更好,曾经有段时间我想zend公司的工具怎么不开源免费呢?
至于framework,我不清楚将会给php带来什么。框架对一个语言来说是很重要的,java和.net就是有很好的框架做后盾,面向对象的思想在php里似乎不能彻底的贯彻,当然IDE+framework肯定是可以提高开发速度的,而php目前是否最需要这个呢?在我的心目里其实是性能。
框架给了我们一个标准,与标准一起来到的当然是设计模式,也就是说我们的开发模式也会随之而改变。改变是好事,如果开始做的不好也不怕。但是只凭在我们实际碰到的应用中往往会遇到各种各样的瓶颈,php的社区里已经解决了许多问题,当然也继续产生了很多问题,以后我们在一个标准化下、一个framework下能不能象以前哪样有创造性的解决问题吗?
我期望php framework的出现,好处大家不说都知道,但我期望不要为了框架的诞生和应用去修改php的本质,不要让语言去适应框架,至少在框架非常成熟之前不要这样做?
posted @ 2006-08-07 19:08 sosopro 阅读(1313) | 评论 (2)编辑 收藏
不知道为什么,这里好像没几个人发表文章,但是我知道其实用php的人非常多,我发了几篇,但是都是linux或unix下的技术,因为我刚接触这两个系统没多久,而且我想深入研究php在这2个系统上的性能,相比cnblogs,或者blogjava,这里都很少人,不过我不担心什么。也许是没有写关于php更详细的技术文章吧,我看到紫雨轩发了好几篇,我也学了不少,真想把这里的人气搞上去,可惜我要仔细研究php后才会写,只要园里不关phpweblog,我会一直写下去的!!!
大家努力!!
希望更多人关注这里!!!
posted @ 2006-08-05 10:51 sosopro 阅读(935) | 评论 (6)编辑 收藏
solaris 9 x86 下如何设置网关地址?

参考 CHINACAI发的solaris9 for x86配置上因特网的方法
为方便,我给你贴过来了,向CHINACAI 致敬!!!!!
我的IBM Netfinity1000机器上装了个solaris 9(for x86 版本)。
IP 为:192.168.0.72
子网掩码:255.255.255.0
网关:192.168.0.254
首选DNS:10.27.1.30
备选DNS:202.102.24.35
配置过程如下:
vi /etc/hostname.iprb0
输入:
nspsx86 (注:主机名)
(注:根据不同的网卡,hostname.xxx 文件的后缀xxx不同,如果网卡装上的话都应该有这个文件)

vi /etc/hosts
输入:
127.0.0.1 localhost
192.168.0.72 nspsx86 loghost (注:IP地址 主机名)

vi /etc/defaultrouter
输入:
192.168.0.254 (注:网关地址)
(注:若etc目录下无defaultrouter文件,则自己在该目录下创建)

vi /etc/nsswitch.conf
输入:
hosts: files dns (注:原先为hosts: files,改成hosts: files dns)

vi /etc/resolv.conf (注:若无此文件,请创建)
输入:
domain nspsx86.domain.com
nameserver 10.27.1.30 (注:首选DNS)
nameserver 202.102.24.35 (注:备选DNS)

重启就可以上因特网了。

另外一种方法:
不用 /etc/defaultrouter 文件(可删除),其他文件照上面配置,然后执行命令:
route add default 192.168.0.254 即可。
不过这种方法重启后就失效了,若要重启后可用,执行如下操作:
在/etc/rc2.d下面创建一个大写s开头的文件(如:Saddrouter)
vi /ec/rc2.d/Saddrouter
输入:
route add default 192.168.0.254
执行:chmod +x Saddrouter,重启就可以了。
posted @ 2006-07-28 11:31 sosopro 阅读(2798) | 评论 (0)编辑 收藏
仅列出标题
共4页: 1 2 3 4