.htaccess htaccess custom php.ini vs php_值或php_标志

.htaccess htaccess custom php.ini vs php_值或php_标志,.htaccess,php-ini,.htaccess,Php Ini,我想为我的项目设置xdebugphp扩展。我有一个linux环境,还有其他人在同一台服务器上工作。我想通过.htaccess文件中的自定义php.ini文件设置来实现这一点。我对此有一些疑问: 我的自定义php.ini文件是否必须是原始php.ini文件的副本,以便只修改我需要的内容?或者在该文件中只包含我要更改的设置就足够了 正如我所做的实验,在.htaccess文件中,设置SetEnv PHPRC/path/to/my/custom/phpinifile高于所有其他设置是很好的。那么SetE

我想为我的项目设置
xdebug
php扩展。我有一个linux环境,还有其他人在同一台服务器上工作。我想通过
.htaccess
文件中的自定义
php.ini
文件设置来实现这一点。我对此有一些疑问:

  • 我的自定义
    php.ini
    文件是否必须是原始
    php.ini
    文件的副本,以便只修改我需要的内容?或者在该文件中只包含我要更改的设置就足够了
  • 正如我所做的实验,在
    .htaccess
    文件中,设置
    SetEnv PHPRC/path/to/my/custom/phpinifile
    高于所有其他设置是很好的。那么
    SetEnv
    下面的手动设置
    php\u值
    php\u标志
    呢?他们会覆盖我的
    php.ini
    文件设置吗

  • 首先,您需要知道可以通过不同的方式配置Web服务器以使用PHP。就我个人而言,我对mod_php和FastCGI很有经验,因此我可以向您简要介绍这两个方面。这些被称为处理程序,它们极大地影响了您如何配置PHP

    mod_php

    如果您已将PHP作为Apache的一个模块安装,则在Apache启动时将读取
    PHP.ini
    文件。在这种情况下,所有主要的PHP指令,如
    zend_extension
    extension
    都将在Apache启动时应用,因此它们不能在
    .htaccess
    文件中设置。根据我的经验,
    .htaccess
    中的
    SetEnv PHPRC
    也不起作用

    FastCGI

    在这种情况下,每次请求到达时都会加载
    php.ini
    文件。因此,如果更改PHP的配置,则不需要重新启动Apache。但是,您不能在
    .htaccess
    文件中设置主要的PHP指令,如
    zend_extension
    extension
    ,它们需要在
    PHP.ini
    文件中设置。这是因为当应用
    .htaccess
    时,已经列出并加载了PHP扩展,更改这些指令将无效(也不会导致错误)。但好消息是,在这种模式下,您可以在
    .htaccess
    文件中使用
    SetEnv PHPRC
    。因此,您可以指向一个定制的
    php.ini
    文件,该文件将加载xdebug

    您还可以加载特定于用户的
    php.ini
    文件。但是我还没有测试过它,所以我不能评论它对你的情况是否有用。也许你可以自己看看。但是在页面中提到,它也只能在CGI/FastCGI中工作

    底线

    如果您使用的是mod_php,那么您别无选择,只能修改原始的
    php.ini
    来加载xdebug。但您可以为每个虚拟主机启用它,将enable命令放入相应的
    .htaccess
    文件中

    如果您使用的是FastCGI,您可以在原始的
    php.ini
    中加载xdebug,也可以拥有自己的
    php.ini
    文件,并在
    .htaccess
    文件中指向它(但在这两种情况下,xdebug都加载在
    php.ini
    文件中)。但是如果您使用的是后一种情况,那么您原来的
    php.ini
    将根本不会被应用。因此,您需要在自己版本的
    php.ini
    文件中提及您想要的任何指令。同样,您可以为
    .htaccess
    文件中的每个虚拟主机打开/关闭xdebug

    无论您选择哪种解决方案,您都需要在
    php.ini
    文件中输入以下内容以加载xdebug:

    zend_extension = /path/to/your/xdebug.so
    
    在虚拟主机的
    .htaccess
    中使用此选项可启用调试:

    php_value xdebug.profiler_enable 1
    
    [更新]

    如何检查您的服务器是否在mod_PHP或FastCGI中运行PHP:


    phpinfo
    的输出中查找服务器API。如果它读取
    Apache2.0处理程序
    它是mod\uPHP,而在FastCGI中它将读取
    CGI/FastCGI

    为什么需要自定义
    php.ini
    文件?我认为在大多数情况下,使用
    .htaccess
    编写的全局配置应该足够了。问题是,我在一台服务器上工作,而其他许多服务器也可以工作。我不想干扰他们的项目。你知道你可以在服务器中拥有你想要的任意多个
    .htaccess
    ?您的项目不是驻留在它自己的子文件夹中吗?然后,您可以在项目的子文件夹中有一个特定的
    .htaccess
    ,它不会与任何其他项目的配置冲突。我看不出有哪种情况是这样的!我说的不是
    .htaccess
    文件,而是在主
    php.ini
    文件中设置
    xdebug
    。这是不可接受的。@Mehran,.htaccess有许多限制。有些设置只能由php.ini更改。我想你已经有了一个完整的答案,所以我不想就此作答。也许你可以补充一点,他可以使用这个函数创建多个环境,这样就可以更容易地向项目中添加特定的配置。但是它当然不能用于添加像xdebug这样的新模块,因为您将需要一个/etc/init.d/apache2重新启动命令。谢谢,但是我看不出
    getEnv
    如何适合这张图片!就我个人而言,我使用
    getEnv
    将参数作为一些配置传递给我的代码,但我不知道如何使用它来加载扩展(正如您自己所说)。所以我不确定这是否与此相关。无论如何,谢谢。事实上,它无法加载扩展,但您可以在bootsrap文件中使用ini_set设置一些.ini值。我认为这太过分了,因为您可以在
    .htaccess
    中设置任何ini指令,而不是将它们设置为环境变量并在引导中读取。就我个人而言,我使用环境变量只有一个目的;这告诉代码应该使用应用程序配置的哪个部分(比如
    开发