5

这个问题还没有解决

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

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/中没有这样的文件或目录第 11 行的 initialize.php 致命错误:require_once(): 无法打开所需的 '/hsphere/local/home/c263430/quoralist.com/includes/includes/config.php' (include_path='.:/hsphere/shared/apache /libexec/php5ext/php/') 在第 11 行的 /hsphere/local/home/c263430/quoralist.com/includes/initialize.php 中

使用下面的 3 个编辑进行更新,以及以下内容

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

我总是收到错误消息

警告:require_once(LIB_PATH/config.php):无法打开流:第 11 行的 /hsphere/local/home/c263430/quoralist.com/includes/initialize.php 中没有此类文件或目录致命错误:require_once():在 /hsphere/local/home/c263430/quoralist.com/includes/initialize.php 中打开所需的 'LIB_PATH/config.php' (include_path='.:/hsphere/shared/apache/libexec/php5ext/php/') 失败在第 11 行

还,

4

2 回答 2

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是(您的站点的)基本 url realpath(dirname(__FILE__)),而是定义它的 FILE 的绝对文件路径。使用此路径,您可以为您的站点设置一个根文件夹。

例如:你不能unlink('www.example.com\img1.jpg')删除img1

你应该这样做unlink(SITE_ROOT.DS.'img1.jpg')

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

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

[更新]

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-rootUsers/kevin/Sites/在 Mac 上,并且Users/kevin/Sites/photogallery是站点根目录。

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

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

会是最合适的。

至于DS,它只是一个 CONSTANT ( DIRECTORY_SEPARATOR),它的定义是因为DIRECTORY_SEPARATOR写得太长了。IE

  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_ROOTyourwebroot/yourproject/includes它必须在的地方yourwebroot/yourproject/includes

有两种方法,一种是

放入initialize.php_yourwebroot/yourproject

另一种方法是

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

或者

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

(我不确定,但其中一个应该可以工作)

也试试这个

defined('SITE_ROOT')? null: define('SITE_ROOT', '/../'.realpath(dirname(__FILE__)));
于 2011-03-06T07:17:41.060 回答
1

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

在photo.php中,只需删除DS

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

工作线是:

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

谢谢!

于 2013-05-03T06:58:26.910 回答