假设当我在计算机上运行命令时,我将环境定义为:
define('HOST', 'localhost');
但是当我在服务器而不是那个上提交时,我想要出现另一个代码:
define('HOST', 'server');
所以我创建了两个文件index.php和index2.php(应该由脚本动态创建)
如何代表index.php提交index2.php?
答案 0 :(得分:1)
对此最好的解决方案是将环境变量保存在未被git跟踪的文件中,并将其包含在php文件中。
例如:
的index.php
require_once('parameters.php');
// rest of your code
parameters.php(适用于本地环境)
define('HOST', 'localhost');
// other parameters that you might want to define for localhost
的.gitignore
./parameters.php
正如您所见,参数文件现在包含您的本地配置,并且不会被git跟踪。您可以使用该环境的配置在远程服务器上创建另一个parameters.php文件。
parameters.php(适用于远程环境)
define('HOST', 'server');
// other parameters that you might want to define for localhost
答案 1 :(得分:1)
似乎您遇到了问题,因为某些文件取决于您的配置,并且您的计算机和服务器上没有相同的配置。
解决方案可能是在Git中放入一个带有通用配置的文件,并让它被覆盖。
这就是Dokuwiki的作用:在他们的回购中有一个local.php.dist,但是用户可以提供local.php来覆盖它。这个local.php并不打算用Git(and is in fact gitignored)
答案 2 :(得分:0)
我通常使用(web)服务器中设置的环境变量。例如,在Apache配置或.htaccess文件中:
SetEnv MYAPP_ENVIRONMENT production
在您的应用中,您可以针对不同的环境进行不同的配置;我以YAML文件的形式保存我的:
default:
foo: bar
baz: 42
production:
foo: blarg
baz: 84
然后查找环境变量:
$env = getenv('MYAPP_ENVIRONMENT');
根据要使用的配置决定。
对于不应存储在存储库中的敏感值(如数据库密码),我甚至允许通过合并到配置文件中的环境变量设置任意值。 E.g:
SetEnv MYAPP_FOO blörg
(上述内容会在任何配置中覆盖foo
。)