定义本地和实时环境路径

时间:2011-08-12 23:11:24

标签: php

我正在使用表单将文件上传到特定的上传文件夹。 现在,在我的本地开发环境中,本地文件夹在像这样的

变量中被编码
$destination = 'c:/public_html/discography/artwork/';

一旦脚本完成并准备好在实时环境中移动,上传文件夹将是

$destination = '/home/my_name/public_html/discography/artwork/';

我的问题如下: 现在,两个变量都是硬编码的。我如何根据环境做到这一点,选择了正确的路径?

如果可能的话,我希望它在一个define语句中,所以我可以在我的脚本中的任何地方使用它:

define('UPLOAD_ARTWORK', ????);

本地:

$destination = 'c:/public_html/discography/artwork/';
$move = move_uploaded_file($_FILES['artwork']['tmp_name'], $destination.$_FILES['artwork']['name']);

直播:

$destination = '/home/my_name/public_html/discography/artwork/';
$move = move_uploaded_file($_FILES['artwork']['tmp_name'], $destination.$_FILES['artwork']['name']);

希望

define('UPLOAD_ARTWORK', ????);
$move = move_uploaded_file($_FILES['artwork']['tmp_name'], UPLOAD_ARTWORK.$_FILES['artwork']['name']);

由于

4 个答案:

答案 0 :(得分:4)

你走在正确的道路上。您只需要一些方法来确定脚本是在本地运行还是在实时服务器上运行。如果您使用的是dev.example.com或ip地址ala 127.0.0.1,则可能是子域。然后你就可以这样写。

switch($_SERVER['HTTP_HOST']){
    case "dev.example.com":
        define('UPLOAD_ARTWORK','c:/public_html/discography/artwork/');
        break;
    default:
        define('UPLOAD_ARTWORK','/home/my_name/public_html/discography/artwork/');
}
$move = move_uploaded_file($_FILES['artwork']['tmp_name'], UPLOAD_ARTWORK.$_FILES['artwork']['name']);

答案 1 :(得分:1)

这样的事情会起作用,具体取决于你的vhost设置方式:

switch($_SERVER['HTTP_HOST'])
{
    case 'dev.mysite.com':
    case 'localhost':
        define('UPLOAD_ARTWORK','c:/public_html/discography/artwork/');
        break;
    case 'www.mysite.com':
        define('UPLOAD_ARTWORK','/home/my_name/public_html/discography/artwork/');
        break;
}

答案 2 :(得分:0)

为什么不进行像

这样的测试
0 == strcmp('127.0.0.1', $_SERVER['SERVER_ADDR'])

答案 3 :(得分:0)

如果您不想依赖主机名,也可以使用环境变量。

使用Apache网络服务器,即使在.htaccess()内也可以使用SetEnv来添加配置设置,例如您的上传路径(您可以在那里使用大量条件,例如设置基于IP地址,cookie,主机名等的环境。)。

SetEnv upload_path c:/public_html/discography/artwork/

在PHP中,您只需使用超全局$_ENV获取值。

$_ENV['upload_path']