绝对文件路径

时间:2011-03-06 07:13:53

标签: php file path absolute

此问题仍未解决

我正在关注的视频PHP教程正在构建一个名为initialize.php的文件,其中它使用PHP预定义的常量Directory_Separator,然后定义site_root。 site_root是用于PHP查找所需文件的绝对文件路径(不是Web服务器路径)。他给了我们以下代码

defined('DS') ? null : define('DS', DIRECTORY_SEPARATOR);

    defined('SITE_ROOT') ? null :
    define ('SITE_ROOT', DS.'Users'.DS.'kevin'.DS.'Sites'.DS.'photo_gallery');

我假设他的计算机上的文件路径是root / users / kevin / sites / photogallery

我不是在我的计算机上构建网站,而是直接在线。我不知道要插入什么文件路径。

正如他强调的那样,它不是网络服务器路径,而是文件系统路径,我应该把它放在哪里。只是像这样的域名。

define('SITE_ROOT', DS. 'www.example.com');

他不想要网络服务器路径,但文件位于网上?所以我不明白。

更新

视频教程使用以下代码

defined('DS') ? null : define('DS', DIRECTORY_SEPARATOR);

defined('SITE_ROOT') ? null :
define ('SITE_ROOT', DS.'Users'.DS.'kevin'.DS.'Sites'.DS.'photo_gallery');
defined('LIB_PATH') ? null : define('LIB_PATH',SITE_ROOT.DS.'includes');

我使用了这段代码:

defined('DS') ? null : define('DS', DIRECTORY_SEPARATOR);

defined('SITE_ROOT')? null: define('SITE_ROOT', realpath(dirname(__FILE__)));
defined('LIB_PATH') ? null : define('LIB_PATH',SITE_ROOT.DS.'includes');

我收到此错误消息

  

require_once(/hsphere/local/home/c263430/quoralist.com/includes/includes/config.php):   无法打开流:没有这样的文件或   目录   /hsphere/local/home/c263430/quoralist.com/includes/initialize.php   第11行致命错误:   require_once():打开失败   需要   '/hsphere/local/home/c263430/quoralist.com/includes/includes/config.php'   (include_path中= ':/ hsphere /共享/阿帕奇/的libexec / php5ext / PHP /')   在   /hsphere/local/home/c263430/quoralist.com/includes/initialize.php   在第11行

UPDATE 通过experimentX使用下面的3个编辑,以及以下

define('SITE_ROOT', DS.'hsphere'.DS.'local'.DS.'home'.DS.'c263430'.DS.'quoralist.com');

我总是收到错误消息

  

警告:   require_once(LIB_PATH / config.php中):   无法打开流:没有这样的文件或   目录   /hsphere/local/home/c263430/quoralist.com/includes/initialize.php   第11行致命错误:   require_once():打开失败   必需'LIB_PATH / config.php'   (include_path中= ':/ hsphere /共享/阿帕奇/的libexec / php5ext / PHP /')   在   /hsphere/local/home/c263430/quoralist.com/includes/initialize.php   在第11行

另外,

2 个答案:

答案 0 :(得分:10)

怎么样

defined('SITE_ROOT')? null: define('SITE_ROOT', realpath(dirname(__FILE__)));

echo SITE_ROOT;

而不是define('SITE_ROOT', 'www.domain.com')你应该define('SITE_ROOT', realpath(dirname(__FILE__))

www.domain.com是您网站的基本网址,而realpath(dirname(__FILE__))是定义它的FILE的绝对文件路径。使用此路径,您可以为您的站点设置ROOT FOLDER。

例如:您无法unlink('www.example.com\img1.jpg')删除img1

你应该unlink(SITE_ROOT.DS.'img1.jpg');

类似于move_uploaded_file或任何其他目录或文件功能。即,您的文件正被服务器计算机移动和删除(因为php脚本在服务器中执行),因此需要绝对文件路径。

使用此绝对路径,您可以导航到该文件夹​​并访问服务器上的文件。

[UPDATE]

defined('DS') ? null : define('DS', DIRECTORY_SEPARATOR);

defined('SITE_ROOT') ? null : 
    define ('SITE_ROOT', DS.'Users'.DS.'kevin'.DS.'Sites'.DS.'photo_gallery');

虽然我没有Mac,但web-root在Mac上为Users/kevin/Sites/,而Users/kevin/Sites/photogallery是网站根目录。

导师知道这一点,所以他这样做。但是当我们的项目在网络服务器上传时,我们可能不知道这一点,所以

defined('SITE_ROOT')? null: define('SITE_ROOT', realpath(dirname(__FILE__)));

最合适。

至于DS,它只是一个CONSTANT(DIRECTORY_SEPARATOR),它的定义是因为DIRECTORY_SEPARATOR太长而无法编写。即。

  SITE_ROOT'.DIRECTORY_SEPARATOR.'Users'.DIRECTORY_SEPARATOR.'kevin'.DIRECTORY_SEPARATOR.'Sites'.DIRECTORY_SEPARATOR.'photo_gallery'

因此,在定义SITE ROOT

之前定义它
defined('DS')? null: define('DS', DIRECTORY_SEPARATOR);
defined('SITE_ROOT')? null: define('SITE_ROOT', realpath(dirname(__FILE__)));

由于教程已在MAC DIRECTORY_SEPARATOR上完成/。样本在localhost上完成,导师知道他的网络服务器的绝对文件路径,所以他正在做

[错误:更新]

您收到此错误,因为在includes/initialize.php上定义此错误会假定您的SITE_ROOT yourwebroot/yourproject/includes必须是yourwebroot/yourproject/includes

有两种方式,一种方式是

initialize.php放入yourwebroot/yourproject

另一种方式是

defined('SITE_ROOT')? null: define('SITE_ROOT', realpath(dirname(__FILE__)).DS."..".DS);

OR

defined('SITE_ROOT')? null: define('SITE_ROOT', DS.'..'.DS.realpath(dirname(__FILE__)));

(我不确定,但其中一个应该有用)

也试试这个

defined('SITE_ROOT')? null: define('SITE_ROOT', '/../'.realpath(dirname(__FILE__)));

答案 1 :(得分:1)

抱歉,我有没有显示图像的答案

在photograph.php中,只需删除DS

即可
public function image_path() {
  return $this->upload_dir.$this->filename;
}

工作线是:

defined('SITE_ROOT')? null: define('SITE_ROOT', realpath(dirname(__FILE__)).DS."..".DS);

谢谢!