无法让PHP环境变量在本地运行 - Ubuntu 16.04

时间:2017-09-20 03:46:29

标签: php apache2 ubuntu-16.04 slim

在对所有文档,StackOverflow问题和博客文章进行彻底审查后,我可以对这个特定的事情......以及几个小时的故障排除,我仍然无法找到如何使基本环境变量使用工作在我的Slim PHP项目中。

这是我的第一个PHP Web应用程序项目,当然我第一次将环境变量用于PHP。

基本上我尝试做的是在本地.htaccess文件中将密码设置为环境变量,这样在我推送到GitHub的代码中,密码不会被不安全地暴露出来( .htaccess在我的项目中被git 设置为忽略)。

我基本上想要使用以下代码:

.htaccess档案:

SetEnv PASSWORD superSecretPassw0rd

稍后在我项目的适当位置,PHP文件检索该变量并将其用于通过SMTP发送电子邮件。

例如/app/routes.php

$mail->Password = getenv("PASSWORD"); 

现在,我正在做第一部分,在.htaccess文件中设置环境变量。事实上,我尝试过以下两种方式设置环境变量:

SetEnv HTTP_PASSWORD NeTzj6gKJp5q

SetEnv PASSWORD glop

RewriteRule .* - [E=TEST:PasswordJOKES10]

然而,当我var_dump(getenv("TEST"));时,变量显示为bool(false)

我的.htaccess文件根本无法读取。当我删除.htaccess文件的内容时,一切基本上都是相同的,如果文件只是填充了长的随机文本行,它也会这样做。

我还确保module rewrite is enabled。所以这不是问题。

我还检查了/etc/apache2/apache2.conf的设置。最重要的设置看起来像我设置正确:

<Directory /var/www/>
    Options Indexes FollowSymLinks
    AllowOverride All
    Require all granted
</Directory>

# AccessFileName: The name of the file to look for in each directory
# for additional configuration directives.  See also the AllowOverride
# directive.
AccessFileName .htaccess

AllowOverride All已设置,因此.htaccess文件可以正常工作,AccessFileName设置为.htaccess

我的项目的完整路径是/var/www/html/east-end-php-site/,目录结构基本上是这样的:

/east-end-php-site/
  |-----> /app/
  |-----> /config/
  |-----> /vendor/
 composer.json
 README.md
 .htaccess
 index.php

我的本​​地设置:

  • Ubuntu -v 16.04
  • Apache2 -v 2.4.18
  • PHP -v 7.0.22

通过从该目录的根目录在终端中运行命令php -S localhost:8000来运行项目。

我目前在这个问题上遇到了障碍。请告诉我StackOverflow同志,我做错了什么?接下来我应该在哪里进行故障排除?什么可能解决这个问题

额外参考1

整个.htaccess文件如下所示:

AllowOverride ALL

RewriteEngine On

SetEnv HTTP_TEST NeTzj6gKJp5q

SetEnv TEST glop


# Some hosts may require you to use the `RewriteBase` directive.
# If you need to use the `RewriteBase` directive, it should be the
# absolute physical path to the directory that contains this htaccess file.

RewriteBase /var/www/html/east-end-php-site/

RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ - [NC,L]


RewriteCond %{REQUEST_URI}::$1 ^(/.+)(.+)::\2$
RewriteRule ^(.*) - [E=BASE:%1]
RewriteRule ^(.*)$ %{ENV:BASE}index.php [NC,L]

RewriteRule .* - [E=TEST:PasswordJOKES10]

1 个答案:

答案 0 :(得分:1)

  1. .htaccess仅适用于apache,不适用于内置Web服务器
  2. 要模拟$ _ENV变量,您应该使用https://github.com/vlucas/phpdotenv