绝对文件路径

Lea*_*cim 5 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');
Run Code Online (Sandbox Code Playgroud)

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

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

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

define('SITE_ROOT', DS. 'www.example.com');
Run Code Online (Sandbox Code Playgroud)

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

UPDATE

视频教程使用以下代码

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');
Run Code Online (Sandbox Code Playgroud)

我用过这段代码:

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');
Run Code Online (Sandbox Code Playgroud)

我收到此错误消息

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第11行/hsphere/local/home/c263430/quoralist.com/includes/initialize.php中的/ libexec/php5ext/php /')

通过experimentX使用以下3次编辑进行更新,以及以下内容

define('SITE_ROOT', DS.'hsphere'.DS.'local'.DS.'home'.DS.'c263430'.DS.'quoralist.com');
Run Code Online (Sandbox Code Playgroud)

我总是收到错误消息

警告: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行

也,

San*_*kha 10

怎么样

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

echo SITE_ROOT;
Run Code Online (Sandbox Code Playgroud)

而不是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');
Run Code Online (Sandbox Code Playgroud)

虽然我没有自己的mac,但web-rootUsers/kevin/Sites/在Mac上,而且Users/kevin/Sites/photogallery是站点根目录.

导师知道这一点,所以他这样做.但是当我们的项目在webserver上传时,我们可能不知道这一点,所以

defined('SITE_ROOT')? null: define('SITE_ROOT', realpath(dirname(__FILE__)));
Run Code Online (Sandbox Code Playgroud)

将是最合适的.

至于DS它,它只是一个CONSTANT(DIRECTORY_SEPARATOR),它被定义因为DIRECTORY_SEPARATOR写入时间太长.即

  SITE_ROOT'.DIRECTORY_SEPARATOR.'Users'.DIRECTORY_SEPARATOR.'kevin'.DIRECTORY_SEPARATOR.'Sites'.DIRECTORY_SEPARATOR.'photo_gallery'
Run Code Online (Sandbox Code Playgroud)

因此,在定义SITE ROOT之前定义它

defined('DS')? null: define('DS', DIRECTORY_SEPARATOR);
defined('SITE_ROOT')? null: define('SITE_ROOT', realpath(dirname(__FILE__)));
Run Code Online (Sandbox Code Playgroud)

由于教程是在MAC DIRECTORY_SEPARATOR上完成的/.并且示例完成后localhost,导师知道他的网络服务器的绝对文件路径,所以他正在做

[错误:更新]

您收到此错误,因为定义此错误会includes/initialize.php假定您的位置一定SITE_ROOT是您所在的yourwebroot/yourproject/includes位置yourwebroot/yourproject/includes.

有两种方法,一种方法是

initialize.phpyourwebroot/yourproject

而另一种方式是

defined('SITE_ROOT')? null: define('SITE_ROOT', realpath(dirname(__FILE__)).DS."..".DS);
Run Code Online (Sandbox Code Playgroud)

要么

defined('SITE_ROOT')? null: define('SITE_ROOT', DS.'..'.DS.realpath(dirname(__FILE__)));
Run Code Online (Sandbox Code Playgroud)

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

也试试这个

defined('SITE_ROOT')? null: define('SITE_ROOT', '/../'.realpath(dirname(__FILE__)));
Run Code Online (Sandbox Code Playgroud)