首页 > PHP教程

Zope的优点及和Apache+PHP+MySQL的比较

Zope能和Apache+PHP+MySQL进行比较是因为它即是http服务器,又是数据库,又包含脚本编程语言。现在向大家推荐Zope是因为它的功能更丰富,建立应用更容易,效率比PHP高几倍。现在的服务器端编程环境有IIS+ASP+sqlserver、Apache+PHP+MySQL、和现在的Zope,相比较Zope对于文档出版更专业。

阅读全文

Web制造工具:java和php的较量

相对于Java由简入繁的演变趋势,PHP忠于简单易学原味的坚持受到广大开发者的欢迎,近年来声势大涨,而简单就是力量,这句话套用于近日PHP异军突起,再适合也不过了。老实说,原本觉得它不会太厉害,看到它最近的成长和茁壮,直攻Java阵营输于经营之处,让人对它刮目相看。 Netscape前CEO Marc Andressen在Zend/PHP大会上预言,简单易学的描述语言PHP将会比Java被更多人用于Web应用的开发上;再引用Cnet台湾报导的数据,全球大约有2200万个网站使用PHP,而且数量还在稳定增加中。
为什么PHP会如此受欢迎呢?我想简单好用是最大原因。如果网站只是提供使用者搜寻资讯的入口,网际网路上有许多现成、免费的、容易拿到,且已经做好的网站软体,如行事历、网站管理、新闻、报名系统、电子报、天气预报等免费的应用模组供下载安装使用,如此好康的事情,何乐而不为?而且只要买一本书,装一装,简单的设定就有讨论区,不用写任何程式,这对没有程式经验的人来说是好的进入点,也符合中小企业低成本建置网站的需求。作为Java人士,PHP的窜起给了我三个启示:

Web 开发:PHP夹缝中求生存之道
这些网路应用软体Java做不到吗?PHP 夹在JSP(JavaServer Page )和ASP(Active Server Page)中间,说实在的,应该一点生存的机会都没有,因为他们的难易度、观念和架构、程式语法这三样差异不大;如果从弹性的角度来看,ASP可以去呼叫 COM+元件,JSP是呼Java Beans元件,从开发延展性和系统的扩充性来说,都比PHP好太多,软体应用空间也相对更广阔。当然,这些语言因为各有特长,都各自有发展,而PHP在众多网站开发工具市场中没有变得比较差,反而变得比较大,软体是免费虽然是主因之一,但我认为更重要的是,PHP社群很专心地开发动态网页技术,而且这个点作对了,而如果要学ASP就还要再学VB,学元件开发,Java领域除了JSP外,还可以作 Severlet,作Severlet就会想说把EJB结合在一起,所以体系会越来越复杂,越复杂就筑起更高的学习门槛,如此一来,学习意愿低,人才少,成本相对较高,直接影响企业采用意愿。
现在的软体世界不只是应用之争,也是平台的拉锯战;过去开发人员会比较哪种程式语言比较棒,组合语言、Cobol、PL1、Ada(人工智慧)、LSPER、C等语言陆续问世,到最后只剩下C语言能留下来,连Pscal都需要有Delphi 撑下来才能存活;如果要问说受欢迎的程式语言要具备什么特色,这些特色还真难归纳,例如开发弹性、功能强大、限制少、容易开发、使用性高等,每个语言先天都有这些特色,如果这些条件是程式语言存亡的关键因素,我想上述语言应该都不会结束,但随著技术演进和环境的改变,不适用或不符开发者需求的语言将逐渐被淘汰。

符合中小企业需求:免费、简单易学
然而,在众声喧哗的技术空间中,唯一的相同点是大家皆支持并积极投入网际网路的发展,而PHP社群专注地开发网路主流应用,并且将这些模版免费让使用者下载,这些应用模版用ASP或JSP开发,绝对都作得出来,但因为没有人作,所以少了这一块;ASP或JSP作出来的应用软体都要卖钱,既然是商业行为,使用者宁愿选不花钱、好用、又有原始码可修改的软体,PHP再结合其他开放原始码软体如Apache、MySQL和Linux,整个族群就会越来越壮大。我相信PHP会越做越好,但它主攻的部分-动态网页技术,如果被JSP或ASP赶上,它的前途就会受到限制,毕竟PHP还是没办法处理后端的大量运算机制,其效率和严谨度都会比较受挑战;大型运算处理工作一定要Java Beans来计算,如果是.NET平台就用.NET Componet来计算。相反的状况,如果用JSP或 ASP来开发网站应用软体,能不能追上PHP的表现?我想只要1~2年内就可以追上,这些软体开发完成后会不会是免费的,这就是困难点。目前市场上看到的 JSP或ASP应用模组多半需要付费使用,而ASP和Windows Server捆绑,还搭配网页伺服器IIS和资料库SQL Server,这一买下来还是要数十万,对中小企业来说是庞大的负担。

Java前端网路应用仍须努力
Java延伸出来的系统架构从Java 2 EE、Java 2 SE到Java 2ME,资讯的力量从企业后端推向桌面、每个手持装置,甚至到每一张晶片卡,用途非常广泛;网页技术只是占Java技术的10%,网页技术则是PHP的全部,PHP开发者就全心全力发展相关应用,所以能够做出最好的网页呈现效果;Java不是作不出这些效果,只是投入于网页开发的资源比较少,而往更深更广、更具延展性的未来发展,也难怪有人说Java越来越难、越来越复杂。这篇文章的目的不是要拉拢PHP开发者投向Java阵营的怀抱,也不是鼓励Java开发者未来就往网页技术领域耕耘,当然啦,Java人如果要用自己熟悉的语言往网页技术发展,发展到和PHP不相上下的地步,我们也乐见其成,因为,他补足了Java原本跑在最前面、却疏于耕耘的一块小园地。网站已经是企业经营发展必备的工具(must have),每个公司根据本身需求规画网站机制,对于规格要求不严格、客制化需求不高或没有IT人员的企业,鼓励他们采用PHP应用模组,在最低花费、不用改程式的前提下,导入几个实用的应用模组,因应公司当下需要;然而,客制化需求高、需要大量的讯息交换或交易机制的企业,就一定要找Java厂商了。

阅读全文

PHP数据缓存技术之三

 

PHP应用程序的性能优化
使用PHP编程的最大好处是学习这种编程语言非常容易以及其丰富的库。即使对需要使用的函数不是十分了解,我们也能够猜测出如何完成一个特定的任务。
尽管PHP非常简单易学,但我们仍然需要花费一点时间来学习PHP的一些编程技巧,尤其是与性能和内存占用相关的技巧。在PHP中,有许多小技巧能够使我们减少内存的占用,并提高应用程序的性能。在本篇文章中,我们将对PHP应用程序的分析、如何改变脚本代码以及比较优化前后的各种参数值进行简要的介绍。

阅读全文

PHP与其它CGI的比较

无可置疑的,写 CGI 的方式有很多种,而 PHP 只是其中的一种选择罢了。对资深的 Webmaster 而言,CGI 的写作界面应是随着需求而改动。毕竟,在一个对系统反映速度要求极严格的系统而言,恐怕只有 NSAPI 界面写的 CGI 程序才能符合要求了。在其它的场合,相信使用 PHP 来作为 CGI 的界面是游刃有余,而且是最适合的。

程序界面PHPASPCGINSAPI ISAPI
操作系统均可 Win32 均可 均可 Win32
Web服务器数种 IIS 均可 Netscape Server IIS
执行效率极快 极快
稳定性中等 最高
开发时间中等
修改时间中等
程序语言PHP VB 不限 C/C++ C/ Delphi
网页结合
学习门槛极高
函数支持不定 中等
系统安全极差 最佳 尚可
使用网站超多 极少
改版速度


阅读全文

php.ini 配置详细选项

php.ini 或 php3.ini 是 PHP 在启动时会读取的配置文件。该文件的存放路径为 /usr/local/lib/。在 PHP 3.x 版的配置文件为 php3.ini;而在 PHP 4.x 版改为 php.ini。若 PHP 安装成服务器的模块,则在 Web 服务器启动执行时会读取,之后就不再读取,因此改动配置的话要重新启动 Web 服务器。若使用独立 PHP CGI 方式,则每次都读一次。

要看目前的系统配置,可以用phpinfo()看到。以下为选项配置

php_value name value 配置变量名称和值。本选项需 PHP 4.x 版之后才能使用。

php_flag name on|off 配置标志布尔变量选项。本选项需 PHP 4.x 版之后才能使用。

php_admin_value name value 配置 Apache 的配置文件变量。原来在 .htaccess 的配置改到这个选项配置。本选项需 PHP 4.x 版之后才能使用。

php_admin_flag name on|off 配置布尔变量当标志。本选项需 PHP 4.x 版之后才能使用。

asp_tags boolean 配置 PHP 程序是否解析以 ASP Script 语法 <% %> 的标记 (tag)。本选项在 PHP 3.0.4 之后才可使用。更多的细节可以参考>嵌入方法的部份。

auto_append_file string 配置本选项可以让指定的文件附加在原 PHP 程序后面自动执行。若 PHP 程序中有用到 exit() 函数,则指定的文件不会执行。参数 string 即为指定自动执行的文件。

auto_prepend_file string 配置本选项可以让指定的文件在原 PHP 程序之前自动执行。参数 string 即为指定自动执行的文件。

cgi_ext string 本选项配置 CGI 程序的扩展名。

display_errors boolean 本选项配置是否要将执行的错误信息显示在用户的浏览器上。

doc_root string 配置服务器的文件及 PHP 文件放置的根目录。

engine boolean 本选项需要使用apache的模块方式使用 PHP。可配置是否要使用 PHP 引擎。在 httpd.conf 中加入 php3_engine on/off 亦可配置某目录或某虚拟网站是否要用 PHP 解析器。

error_log string 本选项用来配置错误记录文件。在 UNIX 系统上参数 string 即为文件名。Windows NT 会将记录记在事件检视器的日志之中。Windows 95/98 则不支持系统记录。

error_reporting integer 本选项用来配置系统记录的等级。参数 integer 即为等级的级数标志,可以加在一起,默认值为 7,见下表
 
级数说明
1一般的错误
2一般的警告
4解析错误
8非关键的警告

open_basedir string 本选项用来配置提供 PHP 存取的最底层目录。从该指定目录之下的文件或目录,PHP 程序才能存取。使用本选项主要是为了系统安全性的考虑。参数 string 即为要限制的最底层目录节点。值得注意的是在 UNIX 系统中,若该节点之下的文件或目录有符号链结 (symbolic link),则可能会让使用本选项的目的打折,因此在目录的设计上考虑,也是 Webmaster 的重要任务。默认值是所有文件均可存取。在 PHP 3.0.7 版之后,可以配置多个底层目录。

gpc_order string 配置 GET/POST/COOKIE 三种模块的顺序及规则。参数 string 即为要配置的规则,例如:配置成 GP 表示忽视 cookie,并在存取方法 (method) 相同时,以 POST 取代 GET。

ignore_user_abort string 默认值为 Off。用来配置当传输未完成时,用户端断线是要继续处理。

include_path string 为 PHP 程序中 require、include 及 fopen_with_path 等函数的文件搜寻路径。在 UNIX 或 Windows 中的斜线方向不同。

log_errors boolean 指定程序错误时是否要记录在 log 文件中。

magic_quotes_gpc boolean 配置 GET/POST/COOKIE 三种模块的特殊字符,包含单引号、双引号、反斜线、及空字符 (NUL) 是否要自动加入反斜线当溢出字符。

magic_quotes_runtime boolean 配置返回资料是否自动加入反斜线当溢出字符。

magic_quotes_sybase boolean 配置 sybase 资料中单引号要自动加上反斜线当溢出字符。

max_execution_time integer 配置程序最久执行时间。单位是秒。

memory_limit integer 配置程序最多使用多少内存。

short_open_tag boolean 配置是否使用短的 PHP 标记 ()。若不使用,则必须要用

track_errors boolean 打开本选项可使最后的错误信息跟着全局变量 $php_errormsg。

track_vars boolean 打开本选项可让用户输入的字符串自动解析到变量之中,而不用自己处理。

upload_tmp_dir string 指定上传文件临时路径。

user_dir string 指定用户根目录的路径。

warn_plus_overloading boolean 若打开本选项,字符串间就只能用英文的句号 (.) 链接,而不能用加号 (+) 链接字符串。

SMTP string 在 Windows 系列操作系统中,用来指定 SMTP 服务器,供 mail 函数使用。参数 string 为 SMTP 服务器名字。

sendmail_from string 配置 From: 字符串供 Windows 系列操作系统使用 mail 函数。

sendmail_path string 配置 sendmail 程序的放置路径。例如 /usr/sbin/sendmail。

safe_mode boolean 配置 PHP 在安全模式下执行。

safe_mode_exec_dir string 配置安全模式程序执行的路径。

debugger.host string 指定远端调试的服务器名称,可以是 IP 或 Domain Name。

debugger.port string 配置远端调试服务器的端口 (port)。

debugger.enabled boolean 配置是否可以为调试模式。

enable_dl boolean 本选项要使用apache模块 (Apache module) 的方式才有效。用来配置 PHP 的函数可否作用。当系统处于安全模式 (safe-mode) 时,本选项 enable 也无法使用 dl() 函数。

extension_dir string 配置动态函数的路径。

extension string PHP 启动时所要载入的动态扩充功能。

mysql.allow_persistent boolean 配置是否允许 MySQL 数据库持续连接 (persistent connections),会影响函数。

mysql.max_persistent integer 配置每个处理程序最多保持几个 MySQL 持续连接。

mysql.max_links integer 配置每个处理程序最多开几个 MySQL 连接,包括持续连接。

msql.allow_persistent boolean 配置是否允许 mSQL 数据库持续连接 (persistent connections),会影响函数。

msql.max_persistent integer 配置每个处理程序最多保持几个 mSQL 持续连接。

msql.max_links integer 配置每个处理程序最多开几个 mSQL 连接,包括持续连接。

pgsql.allow_persistent boolean 配置是否允许 Postgres 数据库持续连接 (persistent connections),会影响函数。

pgsql.max_persistent integer 配置每个处理程序最多保持几个 Postgres 持续连接。

pgsql.max_links integer 配置每个处理程序最多开几个 Postgres 连接,包括持续连接。

sybase.allow_persistent boolean 配置是否允许 Sybase 数据库持续连接 (persistent connections),会影响函数。

sybase.max_persistent integer 配置每个处理程序最多保持几个 Sybase 持续连接。

sybase.max_links integer
配置每个处理程序最多开几个 Sybase 连接,包括持续连接。

sybct.allow_persistent boolean 配置是否允许 Sybase-CT 数据库持续连接 (persistent connections),默认值是打开的。

sybct.max_persistent integer 配置每个处理程序最多保持几个 Sybase-CT 持续连接。默认值为 -1 表示无限制。

sybct.max_links integer 配置每个处理程序最多开几个 Sybase-CT 连接,包括持续连接。默认值为 -1,表示没有限制。

sybct.min_server_severity integer 配置 Sybase-CT 服务器错误报告的最少笔数。默认值为 10。

sybct.min_client_severity integer 配置 Sybase-CT 客户端错误报告的最少笔数。默认值为 10。

sybct.login_timeout integer 配置 Sybase-CT 最久可以使用的登入时间。默认值为 1 分钟。

sybct.timeout integer 配置 Sybase-CT 的 query 操作时间限制。默认值为无限制。

sybct.hostname string 配置 Sybase-CT 可连接机器名称。默认值不设限

ifx.allow_persistent boolean 配置是否允许 Informix 数据库持续连接 (persistent connections),会影响函数。

ifx.max_persistent integer 配置每个处理程序最多保持几个 Informix 持续连接。

ifx.max_links integer 配置每个处理程序最多开几个 Informix 连接,包括持续连接。

ifx.default_host string 配置 Informix 默认连接的服务器名称,供ifx_connect()或ifx_pconnect()函数使用。

ifx.default_user string 配置 Informix 默认连接的用户帐号,供ifx_connect()或ifx_pconnect( 函数使用。

ifx.default_password string 配置 Informix 默认连接的用户密码,供ifx_connect()或ifx_pconnect() 函数使用。

ifx.blobinfile boolean 配置 Informix 长位类模式,0 表在内存;1 表在文件中。亦可以在 PHP 程序中使用ifx_blobinfile_mode()函数来修改。

ifx.textasvarchar boolean 配置 Informix 文字模式默认值,0 表返回 blob 的代码;1 表返回 varchar 字符串。亦可在 PHP 程序中使用ifx_textasvarchar() 函数来修改配置。

ifx.byteasvarchar boolean 配置 Informix 位组模式默认值,0 表返回 blob 的代码;1 表返回 varchar 字符串。亦可在 PHP 程序中使用ifx_byteasvarchar() 来修改配置。

ifx.charasvarchar boolean 配置 Informix 返回字符串的字尾空格是否要自动去除。

ifx.nullformat boolean 配置 NULL 字段的返回方式,true 表示返回字符串 NULL,false 表格返回字符串 。亦可在 PHP 程序中以ifx_nullformat() 修改。

bcmath.scale integer 配置 BC 高精确度函数库的小数点位数。

browscap string 配置浏览器的开文件能力名。

uodbc.default_db string 配置 ODBC 默认连接的数据库名称,供odbc_connect()或odbc_pconnect()函数使用。

uodbc.default_user string 配置 ODBC 默认连接的用户帐号,供odbc_connect()或odbc_pconnect()函数使用。

uodbc.default_pw string 配置 ODBC 默认连接的用户密码,供odbc_connect()或函数使用。

uodbc.allow_persistent boolean 配置是否允许 ODBC 数据库持续连接 (persistent connections),会影响odbc_pconnect()函数。

uodbc.max_persistent integer 配置每个处理程序最多保持几个 ODBC 持续连接。

uodbc.max_links integer 配置每个处理程序最多开几个 ODBC 连接,包括持续连接。

以下和 session 有关的配置值,都在 PHP 4.x 以上的版本方支持。在 php.ini 的配置文件中。

session.save_handler 定义 session 储存资料的文件名称。默认值为 files。

session.save_path 定义 session 储存资料的文件路径。默认值为 /tmp。

session.name 配置 session 所使用的 cookie 名称。默认值为 PHPSESSID。

session.auto_start 配置 session 是否自动打开。默认值为 0 (否)。

session.lifetime配置 cookie 送到浏览器后的保存时间,单位为秒。默认值为 0,表示直到浏览器关闭。

session.serialize_handler 定义连续/解连续资料的标头,本功能只有 WDDX 模块或 PHP 内部使用。默认值为 php。

session.gc_probability 配置每笔要求回应时的废物蒐集 (gc, garbage collection) 处理机率。默认值为 1。

session.gc_maxlifetime 配置废物被清除前的存活秒数。

session.extern_referer_check 决定参照到客户端的 Session 代码是否要删除。有时在安全或其它考虑时,会配置不删除。默认值为 0。

session.entropy_file 配置 session 代码建立时,使用外部高熵值资源或文件来建立,例如 UNIX 系统上的 /dev/random 或 /dev/urandom。

session.entropy_length 配置 session 从高熵值资源读取的位组数。默认值为 0。

session.use_cookies 配置是否要将 session 变成 cookie 存在用户端。默认值为 1,表是打开本功能。



阅读全文

PHP站点安全配置教程

本文通过介绍一些技巧介绍了针对PHP木马攻击的防御之道,通过这些方面你可以更好的防范木马程序。
1、防止跳出web目录
首先修改httpd.conf,如果你只允许你的php脚本程序在web目录里操作,还可以修改httpd.conf文件限制php的操作路径。比如你的web目录是/usr/local/apache/htdocs,那么在httpd.conf里加上这么几行:
php_admin_value open_basedir /usr/local/apache
/htdocs
这样,如果脚本要读取/usr/local/apache/htdocs以外的文件将不会被允许,如果错误显示打开的话会提示这样的错误: 
Warning: open_basedir restriction in effect. File is in wrong directory in 
/usr/local/apache/htdocs/open.php on line 4 
等等。 
2、防止php木马执行webshell 
打开safe_mode, 
在,php.ini中设置 
disable_functions= passthru,exec,shell_exec,system
二者选一即可,也可都选
3、防止php木马读写文件目录 
在php.ini中的 
disable_functions= passthru,exec,shell_exec,system
后面加上php处理文件的函数 
主要有 
fopen,mkdir,rmdir,chmod,unlink,dir 
fopen,fread,fclose,fwrite,file_exists 
closedir,is_dir,readdir.opendir 
fileperms.copy,unlink,delfile 
即成为 
disable_functions= passthru,exec,shell_exec,system,fopen,mkdir,rmdir,chmod,unlink,dir 
,fopen,fread,fclose,fwrite,file_exists 
,closedir,is_dir,readdir.opendir 
,fileperms.copy,unlink,delfile 
ok,大功告成,php木马拿我们没辙了,遗憾的是这样的话,利用文本数据库的那些东西就都不能用了。
如果是在windos平台下搭建的apache我们还需要注意一点,apache默认运行是system权限,这很恐怖,这让人感觉很不爽.那我们就给apache降降权限吧。
net user apache fuckmicrosoft /add
net localgroup users apache /del
ok.我们建立了一个不属于任何组的用户apche。
我们打开计算机管理器,选服务,点apache服务的属性,我们选择log on,选择this account,我们填入上面所建立的账户和密码,重启apache服务,ok,apache运行在低权限下了。 
实际上我们还可以通过设置各个文件夹的权限,来让apache用户只能执行我们想让它能干的事情,给每一个目录建立一个单独能读写的用户。这也是当前很多虚拟主机提供商的流行配置方法哦,不过这种方法用于防止这里就显的有点大材小用了。

阅读全文

多PHP服务器实现多session并发运行

首先介绍一下session的概念:所谓session是微软首先提出的,在asp中最先集成。由于session的采用,大大方便了web开发员的工作。一时间asp风靡全球。现在php4也加入session的支持,再度显示出open source 的强大力量。和Cookie类似,设计Session的目的也是为了在一个访问期间在不同的页面间传输数据以解决http协议无状态的问题,但Session更加简单、更加安全。Session 中文没有一个统一的译法,我习惯上译为会话。关于session的意义大家都应该清楚: 其实是在浏览某个网站时,在浏览器没有关闭的情形之下,一个web应用的开始和结束。一个...
阅读全文

如何对PHP程序中的常见漏洞进行攻击

之所以翻译这篇文章,是因为目前关于CGI安全性的文章都是拿Perl作为例子,而专门介绍ASP,PHP或者JSP安全性的文章则很少。Shaun Clowes的这篇文章比较全面地介绍了PHP的安全问题,原文可以http://www.securereality.com.au/studyinscarlet.txt找到。

由于原文比较长,而且有相当一部分是介绍文章的背景或PHP的基础知识,没有涉及到PHP安全方面的内容,因此我没有翻译。如果你想了解这方面的知识,请参考原文。

阅读全文