常见问题
Q: PHP 版本之间有什么联系?
A: PHP/FI 2.0是最早的PHP版本,已经不再支持。PHP 3是PHP/FI 2.0的后继者,要好很多。PHP 5是目前一代的PHP,内部使用了Zend 2引擎,除了很多新功能之外还提供了许多附加的面向对象编程(OOP)特性。
Q: 可以同时运行几个不同版本的PHP吗?
A: 可以,请参阅见PHP源程序发行包中的 INSTALL文件。
Q: 应该上哪儿去找我的php.ini文件
A: UNIX中默认在 /usr/local/lib目录中,也就是 <install-path>/lib。可以在编译时通过 --with-config-file-path标记来改变路径。Windows中php.ini文件的默认路径在Windows目录下。如果使用的是Apache服务器,则会首先在Apache的安装目录中寻找 php.ini。
Q: PHP是否仅限于处理GET和POST请求方法?
A: 不是,PHP有可能处理任何请求方法,例如CONNECT。适当的回应状态可以用 header()发送。
Q: 我忘了PHP函数的参数顺序,它们是随机的吗?
A: 通常情况下,数组函数的参数里,needle在前,haystack在后;字符串函数中,haystack在前,needle在后。
Q: PHP选项register_globals对我有什么影响?
A: 强烈不建议开启此选项,register_globals会自动生成变量。
Q: 我需要直接访问请求报头中的信息,怎么能办到?
A: 如果以Apache的模块方式运行PHP,那么函数getallheaders()可以做这件事。
Q: 如果不建议使用常用散列函数保护密码, 那么我应该如何对密码进行散列处理?
A: 当进行密码散列处理的时候,有两个必须考虑的因素: 计算量以及“盐”。 散列算法的计算量越大,暴力破解所需的时间就越长。PHP 5.5提供了一个原生密码散列API, 它提供一种安全的方式来完成密码散列和验证。 PHP 5.3.7及后续版本中都提供了一个纯PHP的兼容库。PHP 5.3及后续版本中,还可以使用crypt()函数,它支持多种散列算法。针对每种受支持的散列算法,PHP都提供了对应的原生实现。
Q: “盐”是什么?
A: 加解密领域中的“盐”是指在进行散列处理的过程中 加入的一些数据,用来避免从已计算的散列值表(被称作“彩虹表”中对比输出数据从而获取明文密码的风险。
Q: 我在使用<input type="image">标记,但是没有$foo.x和$foo.y变量,它们哪去了?
A: 当提交表单时,可以用图片代替标准的提交按钮,用类似这样的标记
<input type="image" src="image.gif" name="foo" />
当用户点击了图片的任何部分,该表单会被发送到服务器并加上两个额外的变量: foo.x和 foo.y。因为 foo.x和 foo.y在 PHP 中会成为非法的变量名,它们被自动转换成了foo_x和 foo_y。也就是用下划线代替了点。
Q: PHP 5中还能用MySQL吗?好像找不到了。
A: MySQL依然被支持,唯一区别是PHP 5中默认为不激活。这意味着在PHP的configure一行中不包含有--with-mysql选项,因此必须在编译时手工加入。Windows用户可以编辑 php.ini并激活php_mysql.dll。
Q: 在函数定义中,参数旁边的&是什么意思?
A: 这表示该参数是引用传递,该函数会修改其值。鼓励使用的方法是在函数定义中指定哪些参数应该用引用传递。在函数调用时通过引用传递参数是不推荐的,因为它影响到了代码的整洁。