Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/apache/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php apache2在Travis CI上启动时未设置环境变量_Php_Apache_Travis Ci_Behat - Fatal编程技术网

Php apache2在Travis CI上启动时未设置环境变量

Php apache2在Travis CI上启动时未设置环境变量,php,apache,travis-ci,behat,Php,Apache,Travis Ci,Behat,我正在尝试在Travis CI上设置一个php项目的集成测试。集成测试使用Behat作为行为驱动框架 我将数据库连接信息作为环境变量设置到Travi CI的存储库设置中,我可以看到它们在执行过程中导出: Setting environment variables from repository settings $ export DB_USERNAME=travis $ export DB_PASSWORD=[secure] $ export DB_HOSTNAME=127.0.0.1 $ ex

我正在尝试在Travis CI上设置一个php项目的集成测试。集成测试使用Behat作为行为驱动框架

我将数据库连接信息作为环境变量设置到Travi CI的存储库设置中,我可以看到它们在执行过程中导出:

Setting environment variables from repository settings
$ export DB_USERNAME=travis
$ export DB_PASSWORD=[secure]
$ export DB_HOSTNAME=127.0.0.1
$ export DB_PORT=3306
$ export DB_NAME=oraproject_test
但是我无法使用
getenv()
将这些值输入到我的php代码中,因为它们在apache中没有定义

我尝试将PassEnv添加到VirtualHost定义中,但在apache启动时收到以下警告:

[warn] PassEnv variable DB_HOSTNAME was undefined
[warn] PassEnv variable DB_PORT was undefined
[warn] PassEnv variable DB_NAME was undefined
[warn] PassEnv variable DB_USERNAME was undefined
[warn] PassEnv variable DB_PASSWORD was undefined
我按照Travis CI文档()中的建议配置了Apache+PHP,这是我的Travis.yml

language: php

php:
  - 5.5
  - 5.4

env:
  - APPLICATION_ENV=acceptance

addons:
  hosts:
    - ora.local

install:
  - composer self-update

before_script:
  - sudo apt-get install apache2 libapache2-mod-fastcgi
  # enable php-fpm
  - sudo cp ~/.phpenv/versions/$(phpenv version-name)/etc/php-fpm.conf.default ~/.phpenv/versions/$(phpenv version-name)/etc/php-fpm.conf
  - sudo a2enmod rewrite actions fastcgi alias
  - echo "cgi.fix_pathinfo = 1" >> ~/.phpenv/versions/$(phpenv version-name)/etc/php.ini
  - ~/.phpenv/versions/$(phpenv version-name)/sbin/php-fpm
  - sudo cp -f build/travis-ci-apache /etc/apache2/sites-available/default
  - sudo sed -e "s?%TRAVIS_BUILD_DIR%?$(pwd)?g" --in-place /etc/apache2/sites-available/default
  - sudo service apache2 restart
  # Set the GitHub OAuth token to make use of the 5000 per hour rate limit
  - "mkdir -p ~/.composer"
  - cp .travis.composer.config.json ~/.composer/config.json
  - composer install -d src --dev
  - mysql -e 'create database oraproject_test;'
  - src/vendor/bin/doctrine-module orm:schema-tool:create
  - mysql ${DB_NAME} < tests/sql/init.sql

script:

- phpunit --configuration tests/phpunit.xml
- cd tests
- ../src/vendor/bin/behat
语言:php
php:
- 5.5
- 5.4
环境:
-应用程序环境=验收
插件:
主持人:
-本地的
安装:
-作曲家自我更新
在脚本之前:
-sudo apt get安装apache2 libapache2 mod fastcgi
#启用php fpm
-sudo cp~/.phpenv/versions/$(phpenv版本名)/etc/php-fpm.conf.default~/.phpenv/versions/$(phpenv版本名)/etc/php-fpm.conf
-sudo a2enmod重写操作fastcgi别名
-echo“cgi.fix_pathinfo=1”>>~/.phpenv/versions/$(phpenv版本名)/etc/php.ini
-~/.phpenv/versions/$(phpenv版本名)/sbin/php fpm
-sudo cp-f build/travis ci apache/etc/apache2/sites available/default
-sudo sed-e“s”%TRAVIS_BUILD_DIR%?$(pwd)?g”--就地/etc/apache2/sites available/default
-sudo服务apache2重启
#设置GitHub OAuth令牌以使用每小时5000的速率限制
-“mkdir-p~/.composer”
-cp.travis.composer.config.json~/.composer/config.json
-编写器安装-dsrc--dev
-mysql-e“创建数据库或项目测试”
-src/vendor/bin/doctrine模块orm:schema工具:创建
-mysql${DB_NAME}
我如何告诉Apache“读取”环境变量并让它们对php应用程序可用


非常感谢

您可以使用以下库加载它们:


尝试使用phpdotenv()。

多亏了Travi CI的支持,我的工作正常了

问题在于
sudo服务apache2 restart
使用的环境与运行它的脚本不同

将环境变量传递给Apache的一种方法是将每个环境变量的SetEnv指令定义到virtulhost定义中。 为了避免将环境变量的秘密值放入虚拟主机定义文件中,我们可以使用以下占位符,而不是指定实际值:

SetEnv APPLICATION_ENV    ${APPLICATION_ENV}
SetEnv DB_HOSTNAME        ${DB_HOSTNAME}
SetEnv DB_PORT            ${DB_PORT}
SetEnv DB_USERNAME        ${DB_USERNAME}
SetEnv DB_PASSWORD        ${DB_PASSWORD}
SetEnv DB_NAME            ${DB_NAME}
在启动Apache之前,使用shell命令sed将它们替换为实际值

- sudo sed -e 's/${APPLICATION_ENV}/'"$APPLICATION_ENV"'/g' --in-place /etc/apache2/sites-available/default
- sudo sed -e 's/${DB_HOSTNAME}/'"$DB_HOSTNAME"'/g' --in-place /etc/apache2/sites-available/default
- sudo sed -e 's/${DB_PORT}/'"$DB_PORT"'/g' --in-place /etc/apache2/sites-available/default
- sudo sed -e 's/${DB_USERNAME}/'"$DB_USERNAME"'/g' --in-place /etc/apache2/sites-available/default
- sudo sed -e 's/${DB_PASSWORD}/'"$DB_PASSWORD"'/g' --in-place /etc/apache2/sites-available/default
-sudo sed-e的/${DB_NAME}/'$DB_NAME'/g'-in-place/etc/apache2/sites-available/default