【问题标题】:site root relative path confusion in phpphp中的站点根相对路径混淆
【发布时间】:2012-10-11 23:21:00
【问题描述】:

我正在尝试将图像上传到服务器,从上传的图像创建缩略图,并将相对路径保存到 mysql 数据库。 . . .图片路径是

     /mysite/images/

来自我的站点根目录(在我的本地测试环境中是 wamp/www/mysite/images)

现在,我正在执行目录检查

   if(!is_dir($path) && !is_writable($path)){
    throw new Exception ("$path is not valid .. ");
    }

其中路径是 /mysite/images/ ,认为初始的 '/' 将表示根。

但是,脚本抛出了一个异常,提示路径名无效,而我的

     move_uploaded_file($tmp_name, $path.$filename)

也没有工作。

PS:路径mysite/images/也报错,文件没有移动

现在,我已经通过手动将文档根附加到路径名来进行目录检查和移动文件,现在看起来像

      if(!is_dir($_SERVER['DOCUMENT_ROOT'].$path) && !is_writable($_SERVER['DOCUMENT_ROOT'].$path)){
    throw new Exception ("$path is not valid .. ");
    }

      move_uploaded_file($tmp_name, $_SERVER['DOCUMENT_ROOT'].$path.$filename)

我也改了路径

    mysite/images/ 

删除用于站点根目录的初始斜线。这运行良好

但是,我不明白为什么目录检查和移动上传的文件 sn-ps 没有获取站点根目录的相对链接。

感谢任何想法。

【问题讨论】:

标签: php directory relative-path


【解决方案1】:

问题在于路径表示。

在 linux /mysite 中会尝试访问文件系统根目录下的目录。 Windows 这可能不会产生错误。对于 is_file() 类型的 API,它应该是绝对路径而不是相对路径。

【讨论】:

    【解决方案2】:

    您的网站路径不是wamp/www/mysite/images

    您正在使用网络服务器,您无法访问驱动器,例如:c:/wamp ....

    一旦联机,您将如何访问您的文件? Linux 没有 c:/ ...

    您的网站路径是:http://localhost/mysite/

    如果您的代码编写正确,您的图像路径是:http://localhost/mysite/images./images

    所以,这样做:

    define('ROOT', $_SERVER['DOCUMENT_ROOT']);
    
    include_once(ROOT."/mycfgfile.php");
    

    include_once(ROOT."/includes/mycfgfile.php");
    

    【讨论】:

    • 我是否必须始终使用 ROOT.$path 检查目录权限?
    • 在我的网络服务器上,我手动设置了文件夹权限;而且我每次在该文件夹中写入图像时都不会检查这些设置;该脚本可以写入该文件夹,因为是来自本地主机的请求;访问者不能在该文件夹中写入,因为请求不是来自本地主机;在我的服务器上,如果图像类型是 jpeg,则写入它,如果不是,则丢弃它
    • 即使我的网站在 www.example.com 上在线,请求来自本地主机,因为 apache 网络服务器在那台机器上
    猜你喜欢
    • 1970-01-01
    • 2011-12-19
    • 1970-01-01
    • 2017-07-20
    • 2012-11-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多