PHP与MySQL程序设计 学习笔记 第二章 环境配置

本文详细介绍了如何在主流Linux发行版中安装Apache和PHP,包括apt-get命令的使用,以及Windows上的安装教程。还涵盖了配置过程,如php.ini的调整,Apache的模块加载,以及安全模式的启用与限制。最后提到了PHP配置的常见选项和最佳实践。
摘要由CSDN通过智能技术生成

主流Linux发行包中都加入了Apache,如果没有,也可以利用发行包的打包服务轻松安装(如Ubuntu的apt-get命令)。

http://httpd.apache.org/download.cgi可导航到离你最近的镜像站点。

windows安装方式:https://www.cnblogs.com/wcwnina/p/8044353.html

按以上链接中步骤安装好并启动之后,可访问地址http://localhost:端口号/验证是否安装成功。

Apache文档:http://httpd.apache.org
PHP文档:www.php.net

linux下在官网下载好PHP和Apache的压缩包后直接解压,之后:
1.配置Apache,至少要指定–enable-so,告诉Apache启用加载共享模块功能:
在这里插入图片描述
2.安装Apache,需root权限:
在这里插入图片描述
3.配置、安装php:
在这里插入图片描述
PHP捆绑了一个配置文件,控制PHP的行为,该配置文件的原名是php.ini-dist,需要将此文件复制并重命名为php.ini。这个配置文件可在任何位置,如果它没有在默认位置,则需使用–with-config-file-path选项来配置PHP。还有一个默认的配置文件php.ini-recommanded,用于配置非标准的设置,从而更好地保护和优化安装,它的配置项的安全性更高,但此文件可能与一些遗留的应用程序不完全兼容。使用此文件时,将其复制改名为php.ini即可。

Apache的配置文件在APACHE_INSTALL_DIR/conf/httpd.conf,需要在其中添加以下配置内容:

LoadMoudule php7_module module/libphp7.so    # 放在LoadModule条目后
AddType application/x-httpd-php .php    # 放在AddType条目后

之后进入apache安装目录下,找到bin/apachectl,以-restart选项重新启动它即可。

以上AddType指令的作用为将一个MIME类型绑定到某些扩展名,建议使用.php为扩展名,也可以使用.html、.php5、.jason,也可指定多个扩展名,只要将其都放在一行即可,各个扩展名之间用空格分隔。有些用户喜欢将PHP与.html扩展名关联,这将在每次请求一个HTML文件时把文件交给PHP解析,这将导致性能下降。

phpinfo()函数会提供服务器、操作系统环境、可用扩展包等信息。

在Linux上有很多构建选项,指定./configure --help可查看完整的配置表值列表,如想启用PHP的Bzip2扩展,只需执行./configure --with-apxs=/usr/local/apache/bin/apxs --with-bz2=[INSTALL DIR],但还需安装对应的软件才能通过PHP得到该功能,如Bzip2扩展需要JDK。

在Windows上如果想使用扩展,如想启用PHP的XML-RPC扩展,首先要在php.ini中找到extension_dir指令,将其赋值为PHP目录下的ext目录路径,之后找到;extension=php_xmlrpc.dll,去掉前面的分号从而除去注释,之后保存文件并重启Web服务器就可以了。启用这些扩展时也需要安装该扩展所需的其他软件。

PHP的两个配置文件模板php.ini-dist和php.ini-recommand在5.3.0版本后分别改名为了php.ini-development和php.ini-production,区别在于php.ini-recommand提供了推荐的参数值,需要将其中一个配置文件改名为php.ini。Apache的httpd.conf中的PHPIniDir要被赋值为php.ini文件所在位置。

php.ini相当于Apache的httpd.conf,是PHP的全局配置文件。

php.ini中以分号开头的行是注释。

php.ini的修改何时生效取决于如何安装PHP,如果PHP被作为一个CGI二进制包安装,则每次调用PHP都会读取php.ini,如果PHP被作为Apache模块安装,则必须重启Apache修改才能生效。

PHP作为Apache模块运行时,可通过httpd.conf和.htaccess文件修改php的配置,可在配置项前加上以下关键字:
1.php_value:设置指定配置项的值。
2.php_flag:设置指定布尔配置项的值。
3.php_admin_value:设置指定配置项的值,与php_value不同的是它不能用在.htaccess中,也不能在虚拟主机或.htaccess中被覆盖。
4.php_admin_flag:设置指定布尔配置项的值,与php_flag不同的是它不能用在.htaccess中,也不能在虚拟主机或.htaccess中被覆盖。

如果想禁用短标签指令,并覆盖php.ini中的此指令,可在httpd.conf中增加以下行:

php_admin_flag short_open_tag Off

在执行脚本中直接修改php配置:

ini_set('max_execution_time', '60');

每个配置指令只能在自己的作用域中修改,有4种作用域:
1.PHP_INI_PERDIR:可在php.ini、httpd.conf、.htaccess文件中被修改。
2.PHP_INI_SYSTEM:可在php.ini和httpd.conf文件中被修改。
3.PHP_INI_USER:可在脚本中被修改。
4.PHP_INI_ALL:可在任何地方被修改。

以下对php.ini中配置命令的默认值的描述指的是php.ini-development中的默认值:
1.engine = On | Off,默认值On,作用域PHP_INI_ALL,负责确定php引擎是否可用,如关闭不能使用php。
2.zend.zel_compatibility_mode = On | Off,默认值Off,作用域PHP_INI_ALL,php 5与php 4在面向对象方面有一些不兼容性,这也是很多php 4.x未升级到php 5的原因,该指令可还原php5中的修改,使得php 4程序不用修改就能运行。但该指令已在php 5.3.0中被去除,它没有起到预期的作用。
3.short_open_tag = On | Off,默认值Off,作用域PHP_INI_ALL,php脚本部分被包围在转义语法中,有4种不同的转义格式,最短的是短开放标签:

<?
    echo "aaa";
?>

此语法与XML相同,某些情况下会导致问题,如果short_open_tag为Off时不允许使用短标签。
4.asp_tags = On | Off,默认值Off,作用域PHP_INI_ALL,为On时使得php支持ASP风格脚本定界符:

<%
    echo "aaa";
%>

5.precision = integer,默认值14(Linux)/12(Win32),作用域PHP_INI_ALL,指定浮点数表示中显示的有效数字个数。
6.y2k_compliance = On | Off,默认值On,作用域PHP_INI_ALL,Y2K为千年虫问题,有些人还在使用过时的浏览器,就需要打开此选项以兼容过时的软件。
7.output_buffering = On | Off | integer,默认值4096,作用域PHP_INI_SYSTEM,当首部已经发回给请求者后,如果脚本试图修改首部,会出现以下消息:
在这里插入图片描述
常见的情况是已经向浏览器发回了一些输出,之后程序员又试图向用户发送一个cookie,这是不可能实现的,因为首部总是在输出前面。而当启用这个指令时,php会在脚本完成后一次发送所有输出,这样对首部的后续改变可在没发送之前完成。对于首部问题,最好是尽可能在传送其他内容前先传送首部信息,启用该指令会使性能稍稍下降。
8.output_handler = string,默认值NULL,作用域PHP_INI_ALL,该指令使输出被返回给请求者前,先把输出传递给一个函数,如希望输出被压缩(所有兼容HTTP/1.1的主流浏览器都支持该特性),可令string为ob_gzhandler,它是php的压缩处理函数,位于php的输出控制库中,但不能在设置output_handler为该函数名的同时启用zlib.output_compression。
9.zlib.output_compression = On | Off | integer,默认值Off,作用域PHP_INI_SYSTEM,在返回浏览器之前先压缩,可节省带宽和时间。为该指令赋一个整型值时相当于启用该选项并设置压缩缓冲区字节数。
10zlib.output_handler = string,默认值NULL,作用域PHP_INI_SYSTEM,当zlib库不可用时,指定一个特定的压缩库。
11.implicit_flush = On | Off,默认值Off,作用域PHP_INI_SYSTEM,启用时,每次调用print或echo、以及完成各个嵌入的HTML块后,将自动清除或刷新其内容的输出缓冲区。当服务器需要很长时间编译结果或完成计算时,可向用户输出状态更新,而非等待服务器完成整个过程后才输出。
12.unserialize_callback_func = string,默认值NULL,作用域PHP_INI_ALL,调用unserialize请求反序列化一个未定义的类时,会调用string函数include该类(如果没有定义__autoload()方法)。这个指令对大多用户来说无关紧要,因为php在反序列化未定义类时会报错(如果错误报告级别适当)。
13.serialize_percision = integer,默认值100,作用域PHP_INI_ALL,在串行化浮点数时小数点后存储的位数,该值太小会损失精度。
14.allow_call_time_pass_reference = On | Off,默认值Off,作用域PHP_INI_SYSTEM,强制传参时都按引用传递。

在多用户环境部署PHP时,如在ISP的共享服务器上,要限制PHP的功能,如果为所有用户提供PHP的全部功能会暴露服务器的漏洞,破坏服务器的资源和文件,此时php可采用受限或安全模式运行,但由于特定特性的名字和其做法导致的混乱,以及多用户ID参与创建和拥有不同文件可能产生不可预期的后果,php的安全模式已从php 5.3.0中移除,强烈建议不用该特性。

启用安全模式会禁用很多函数和可能不安全的特性,禁用的函数和特性包括:parse_ini_file()、chmod()、chown()、chgrp()、exec()、system()、反引号操作符。安全模式还能确保执行脚本的所有者与脚本访问的文件或目录的所有者相一致,但这可能带来不便,因为文件通常由其他用户id上传和生成。

关于安全模式的指令:
1.safe_mode = On | Off,默认值Off,作用域PHP_INI_SYSTEM,为On时启用安全模式。
2.safe_mode_gid = On | Off,默认值Off,作用域PHP_INI_SYSTEM,安全模式下,启用它打开文件时会完成gid检查,禁用它打开文件时会进行一个更严格的uid检查。
3.safe_mode_include_dir = string,默认值NULL,作用域PHP_INI_SYSTEM,打开以上两项时,从该目录中打开文件忽略UID/GID检查。
4.safe_mode_exec_dir = string,默认值NULL,作用域PHP_INI_SYSTEM,启用安全模式时,限制exec()函数只能执行string指定目录中的程序。
5.safe_mode_allow_env_vars = string,默认值PHP_,作用域PHP_INI_SYSTEM,启用安全模式时,限制用户通过PHP脚本能修改的以string为开头的操作系统级环境变量。该指令为空表示用户可修改任何环境变量。
6.safe_mode_protected_env_vars = string,默认值LD_LIBRARY_PATH,作用域PHP_INI_SYSTEM,明确地防止修改某些环境变量,多个环境变量间用,分隔。
7.open_basedir = string,默认值NULL,作用域PHP_INI_SYSTEM,与Apache的DocumentRoot指令类似,可为PHP建立一个基目录,所有文件操作都限制在此目录中,防止用户进入到服务器的其它受限区。该指令不依赖于safe_mode指令。
8.disable_functions = string,默认值NULL,作用域PHP_INI_SYSTEM,禁用某些函数,多个函数间用,分隔。该指令不依赖于safe_mode指令。
9.disable_classes = string,默认值NULL,作用域PHP_INI_SYSTEM,不启用类库中的某些类,多个类间用,分隔。该指令不依赖于safe_mode指令。
10.ignore_user_abort = Off | On,默认值Off,作用域PHP_INI_ALL,启用它让服务器忽略由于用户关闭浏览器和浏览器引起的中断所造成的会话终止。用户经常在页面完全加载前就退出浏览器,通常这并无坏处,但如果服务器在更新个人信息或完成商业交易,就需要开启此选项。

PHP可突出显示源代码,可通过将脚本扩展名指定为.php(可修改),或调用show_source()、highlight_file()可启用该特性。如想使用.php扩展名,需在httpd.conf中添加AddType application./x-httpd-php-source .php

对于突出显示的代码,可通过以下指令控制其中字符串、注释、关键字、背景、默认文本、HTML部分的颜色,每一部分可以指定一个RGB(rgb(0,0,0))、十六进制表示(#000000)、各颜色的关键字(black)表示(以上括号中的值都表示黑色):
在这里插入图片描述
服务器攻击者可能通过Apache在每个响应的首部中广播的如下服务器签名信息获取关于服务器的信息:
在这里插入图片描述
通过以下选项禁止Web服务器签名(如果启用了该签名)广播上述信息,从而不再公开服务器安装了PHP:expose_php = On | Off,默认值On,作用域PHP_INI_SYSTEM。

也可在httpd.conf中将ServerSignature设置为Off以禁止Apache广播其服务器签名。

可通过以下指令控制php脚本独占服务器资源:
1.max_execution_time = integer,默认值30,作用域PHP_INI_ALL,此参数以秒为单位对php脚本的执行时间设置了上限,如果该值为0,会取消最大限制,但通过exec或system函数执行外部程序花费的时间不计算在此限制内。
2.max_input_time = integer,默认值60,作用域PHP_INI_ALL,对php脚本解析请求数据所用时间设置了一个限制,以秒为单位,上传大文件时比较有用。
3.memory_limit = integerM,默认值128M,作用域PHP_INI_ALL,为php脚本分配的最大内存。

外部变量是通过一些外部源传递给脚本的变量,GET、POST、cookie、操作系统和服务器都能提供,以下是关于外部变量的选项:
1.arg_separator.output = string,默认值&amp;(在HTML中表示&),作用域PHP_INI_ALL,php能自动生成URL,并使用标准的&分隔输入变量,该选项可改变此分隔符。
2.arg_separator.input = string,默认值;&,作用域PHP_INI_ALL,&是POST或GET方法用来分隔所传入变量的标准字符,php中改变此约定的可能性不大,但仍能改变。
3.variables_order = string,默认值GPCS,作用域PHP_INI_ALL,可指定变量的解析顺序,当启用了register_globals(不推荐),这些值的顺序会导致不可预料的后果,因为后面的变量会覆盖前面解析的值。
4.register_globals = On | Off,默认值Off,作用域PHP_INI_SYSTEM,php 4.2.0中默认禁用此选项,代价是使旧版本用户重新考虑程序的开发方法,有时还需重新编写应用,但这是为了更好的安全性。之前的所有外部变量都在全局作用域自动注册,即COOKIE、ENVIRONMENT、GET、POST、SERVER类型变量都是全局可用的,可在全局范围内修改,这带来了安全隐患,如有些变量本来只能使用cookie来管理,现在也能通过URL修改,如假设有一个唯一标识用户的会话标识符,通过一个cookie在页面间传递它,除了这个会话标识符的用户,其他人不应看到该用户的数据,该用户可打开cookie复制会话标识符,并粘贴到URL后面:
在这里插入图片描述
然后这个用户可将此链接告诉别人,如果没有其他安全限制(如IP验证),别人就能看到该用户的数据。禁用register_global可避免此现象,它可使每个变量与其类型一起引用,如sessionid变量只能$_COOKIE['sessionid']这样使用。当试图以GET或POST修改此参数时,会在全局作用域内生成一个相应的新变量$_GET['sesssionid']$_POST['sessionid']。该特性是php安全问题和导致混乱的根源,php 5.3.0中已删除该特性。
5.register_long_arrays = On | Off,默认值off,作用域PHP_INI_SYSTEM,是否继续使用已经废弃的语法(如HTTP_*_VARS)注册各种输入数组,出于对性能考虑,推荐禁用。该特性在php 5.3.0中已被禁用。
6.register_argc_argv = On | Off,默认值Off,作用域PHP_INI_SYSTEM,通过GET方法传入变量类似于向可执行文件传递参数,如果希望声明变量$argc和$argv模拟其他语言的输出方法,则启用它。
7.post_max_size = integerM,默认值8M,作用域PHP_INI_SYSTEM,在请求间传递数据的两种方法中,POST更利于传输大量数据,但出于对安全性和性能的考虑,可对向php脚本用POST传递的数据量加一个上限。
8.magic_quote_gpc = On | Off,默认值Off,作用域PHP_INI_SYSTEM,确定是否对GET、POST、cookie方法传输的数据启用魔法引号,启用时,所有单引号、双引号、反斜线、空字符都自动使用反斜线转义。也可手动使用函数addslashes和stripslashes完成此功能。该特性会导致混乱,php 5.3.0中已将其去除。
9.magic_quote_runtime = On | Off,默认值Off,作用域PHP_INI_ALL,启用时,所有来自外部资源(如数据库和文本文件)数据中的引号会被自动使用反斜线转义。
10.magic_quotes_sybase = On | Off,默认值Off,作用域PHP_INI_ALL,只有启动了上个规则才有效,启用时,使用单引号而非反斜线转义,当数据来自Sybase数据库时非常有用,因为Sybase数据库的转义字符是单引号。(我们需要这两项是为了保证我们取出数据再将其放入数据库时,数据不能改变)
11.auto_prepend_file = string,默认值NULL,作用域PHP_INI_SYSTEM,在php脚本运行前,导入代码库或插入页眉时需要include或require函数完成,可在该选项中指定文件路径在脚本中预先导入这些函数。
12.auto_append_file = string,默认值NULL,作用域PHP_INI_SYSTEM,在php脚本执行后自动插入页脚时需要include或require函数完成,可在该选项中指定文件路径在脚本中预先导入这些函数。
13.default_mimetype = string,默认值text/html,作用域PHP_INI_ALL,MIME类型为划分因特网文件类型提供了一种标准方法,常见的是用text/html使用PHP,如果以其他方式使用php,如使用WML(Wireless Markup Language,无线标记语言)应用程序的内容生成器,就要改变MIME类型。
14.default_charset = string,默认值iso-8859-1,作用域PHP_INI_ALL,从php 4起,php会在Content-Type首部中输出字符编码方式,默认不支持中文。
15.always_populate_raw_post_data = On | Off,默认值Off,作用域PHP_INI_PERDIR,启用它时,php会为其赋一个字符串,其中包含以POST方法传递的名/值对(即使表单变量没有相应值)。如启用了该指令且创建了一个包含两个文本域的表单,一个是用户名,一个是用户的邮件地址,在表单动作中执行echo $HTTP_RAW_POST_DATA,如果两个文本域都不填,单击提交,将得到以下输出:
在这里插入图片描述
如果填写两个文本域再提交:
在这里插入图片描述
上图中%40是URL编码中的@。

以下为关于路径设置的指令:
1.include_path = string,默认值NULL,作用域PHP_INI_ALL,指定include、require、fopen_with_path等函数使用的默认路径。默认,此参数是环境变量PHP_INCLUDE_PATH定义的路径。在Linux上,路径中用的是/,多个目录间的分隔符是:;而Windows上用的是\,由于盘符后跟一个冒号,因此多个目录间使用;隔离。
2.doc_root` = string,默认值NULL,作用域PHP_INI_SYSTEM,提供所有php脚本的默认位置,当此参数非空时才使用。
3.user_dir = string,默认值NULL,作用域PHP_INI_SYSTEM,指定使用~/路径打开文件时~表示的目录。
4.extension_dir = string,默认值为./(Linux)或PHP-INSTALLATING-DIRECTORY\ext\(Windows),即可加载扩展模块的位置。Linux上表示可扩展模块与执行脚本位于相同位置。
5.enable_dl = On | Off,默认值Off,作用域PHP_INI_SYSTEM,是否允许脚本运行时加载php扩展。可用ebable_dl函数控制是否允许。

以下指令与访问和处理远程文件有关:
1.allow_url_fopen = On | Off,默认值On,作用域PHP_INI_ALL,启用时使php将远程文件看作本地文件,如果远程服务器上文件权限正确,则php脚本可访问和修改这些文件。
2.from = string,默认值NULL,作用域PHP_INI_ALL,其中包含完成FTP连接的anonymous用户密码,请求验证时,用户名为anonymous时,密码要为string。
3.user_agent = string,默认值NULL,作用域PHP_INI_ALL,php总会随处理的输出发送一个内容首部,其中包含一个用户代理属性,即string。
4.default_socket_timeout = integer,默认值60,作用域PHP_INI_ALL,确定socket流的超时值,单位为秒。
5.auto_detect_line_endings = On | Off,默认值Off,作用域PHP_INI_ALL,不同os采用不同EOL,启用时可确定fgets和file函数读取的数据采用的是哪种EOL。

extension = string,默认值NULL,作用域PHP_INI_ALL,可动态加载一个模块,Windows上模块为.dll文件,Linux上为.so文件。

推荐的IDE:Adobe Dreamweaver CS5、Notepad++、PDT(zend支持的开源项目,在Eclipse之上使用)、Zend Studio(zend的收费IED)。

Web托管服务提供商可分为:
1.专业服务器托管:租用一个完整的Web服务器,让你的网站完全占有全部服务器CPU、磁盘、内存,还可全面控制服务器配置。
2.共享服务器托管:如果你的服务器只需要一定服务器资源,且不想麻烦地管理服务器可选择此方案,共享托管服务托管商会在一个服务器上托管多个网站,并用高度自动化的过程管理系统和网络资源、数据备份、用户支持。价格很低。
3.虚拟私人服务器托管:为每个用户提供一个专用操作系统,能虚拟化(一个服务器上运行多个不同操作系统)完全管理服务器。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值