在前一篇文章中,我们讨论了Azure网站上的PHP架构。在本文中,我将详细介绍如何配置Azure网站上的PHP。

指定PHP版本

登录到Microsoft Azure管理门户网站,在您的网站的配置页面,在常规配置项下,您可以看到PHP版本配置。如下图所示,在默认情况下,所有网站默认启用PHP。目前Microsoft Azure网站支持PHP 5.3,PHP 5.4和PHP 5.5。默认版本为PHP 5.4。
php version

修改PHP配置项

PHP配置分类

PHP配置项分为四类,下表描述了这四类配置选项的具体作用域。

类型 作用域
PHP_INI_USER 可在用户脚本(例如通过ini_set())或者.user.ini文件中设定
PHP_INI_PERDIR 可在php.ini,.htaccess中设定
PHP_INI_SYSTEM 可在php.ini中设定
PHP_INI_ALL 可在任何地方设定

 

关于PHP配置选项分类以及作用域,请参考下面的文章。

http://php.net/manual/en/configuration.changes.modes.php

对于运行在Microsot Azure的PHP网站而言,您可以修改非系统级别的PHP配置。基于安全考虑,您不能修改系统级别的配置选项。其中系统级别配置是指类型为PHP_INI_SYSTEM配置项,这些配置项只能配置在php.ini文件中。修改系统级别配置会影响所有的用户,因此Azure网站不允许您修改系统级别的PHP配置选项。

下面的PHP文档列出了所有的PHP配置项。

http://www.php.net/manual/en/ini.list.php

使用.user.ini文件修改PHP配置选项

很多情况下,您的应用需要修改非系统级别的默认配置。比如,默认情况下,Azure网站中的PHP运行环境最大允许上传8M的文件。如果您的网站需要客户上传更大的文件,比如视频文件,您需要修改upload_max_filesize和post_max_size配置。默认情况下,PHP的最长执行时间为30秒。而在Microsoft Azure网站中,默认为300秒。如果希望PHP脚本执行更长时间,那么您需要修改max_execution_time设置。下面的步骤演示了在Microsoft Azure网站中如何修改非系统级别的配置选项。

  1. 创建一个.user.ini文件,该文件包含要修改的配置项。下面的配置将最大上传文件设置为16M,将PHP执行超时时间设置为120秒。

    ;allow PHP script run as long as 2 minutes
    max_execution_time=120
    ; post_max_size > upload_max_filesize
    Post_max_size=16M
    ; allow upload files up to 16M
    upload_max_filesize=16M
  2. 将该文件部署到网站的根目录下
  3. 登录到Microsoft Azure管理门户网站重新启动网站使修改立即生效。在Microsoft Azure网站的PHP设置中,user_ini.cache_ttl被设置为5分钟。该选项控制PHP保存配置的缓存时间。意味着如果您不重启网站,那么修改可能需要5分钟才能生效。
  4. 您可以通过phpinfo()函数来验证修改。比如创建一个phpinfo.php包含如下内容:

    <?php phpinfo() ?>

    并将该文件上传到您的网站根目录。
  5. 打开浏览器访问phpinfo.php文件,在Configuration部分您会看到您的设置覆盖了默认设置。下图显示了upload_max_filesize的修改结果。16M为您的网站设置,8M为全局的默认设置。
使用ini_set函数修改PHP配置项

.user.ini文件的设置应用于您的整个PHP站点。如果只希望针对某个PHP页面修改配置,那么您可以选择使用ini_set()函数。Ini_set()函数修改的配置项只应用于本页面中,在本页面执行结束后恢复默认设置,不影响其它页面。Ini_set()函数的具体函数定义和示例请参考PHP文档。

http://www.php.net/manual/en/function.ini-set.php

下面我们通过一个简单的场景来解释如何使用ini_set函数来修改PHP配置项。在Azure网站中,我部署了一个页面(error.php),但是该页面总是返回空白页面。如果使用IE调试功能,我发现该页面返回500错误。为了获取更多的页面错误信息,我写了一个简单页面如下:

<?php
ini_set('display_errors', 'stdout');
include("error.php");
?>

将该页面部署到Azure网站,访问该页面,显示如下信息。非常简单直接的告诉我们error.php的第二行有语法错误。

display php error

下一篇文章,我们将讨论如何配置自定义PHP版本。

 

Leave a comment

电子邮件地址不会被公开。 必填项已用*标注