php copy() 使用目标绝对路径

Posted

技术标签:

【中文标题】php copy() 使用目标绝对路径【英文标题】:php copy() using destination absolute path 【发布时间】:2014-07-23 17:56:35 【问题描述】:

我无法搜索无法在 copy() 目标中使用绝对路径的任何地方。然而,

$baseUrl_master_MM = "http://mysite.öä/MM/";
$img_dir = 'img_1';
$img = '01.jpg';

$orig_online = $baseUrl_master_MM.$img_dir.'/'.$img;
$dest_online = '../../mm_img/'.$img_dir.'-online.jpg';
$copy = copy($orig_preview, $dest_preview);

工作正常,但与绝对路径相同

$baseUrl_master_MM = "http://mysite.öä/MM/";
$baseUrl_master_MM_online = "http://mysite.öä/mm_img/";
$img_dir = 'img_1';
$img = '01.jpg';

$orig_online = $baseUrl_master_MM.$img_dir.'/'.$img;
$dest_online = $baseUrl_master_MM_online.$img_dir.'-online.jpg';
$copy = copy($orig_preview, $dest_preview);

不会出错,也不会复制任何文件。

目标目录存在,权限为 777。我错过了什么吗?

【问题讨论】:

是的,你错过了一些东西。当源是一个 URL 时,php 足够聪明地为您下载它(它实际上为此使用 HTTP - 它不知道它是您的网站/当前网站),然后当您尝试在目标中使用它时,它显然放弃了,因为它不能只上传到网站。只需使用绝对 server 路径(eg. /home/user/www/mm_img/C:\wamp\www\mm_img\ )。 dirname(__FILE__) 将为您提供当前文件的目录。绝对路径与绝对 URL 不同。 你使用的不是服务器的绝对路径,而是公共网址。如果你真的想要绝对路径,请看这个问题:***.com/questions/4645082/… 如果不是评论,我会将 H2o*n 的评论标记为正确答案.. 【参考方案1】:

您不能使用 HTTP 协议来复制服务器上的文件。取自 HTTP wrapper 上的 PHP 文档

允许使用 HTTP GET 方法通过 HTTP 1.0 对文件/资源​​进行只读访问。

要复制到本地服务器,请使用绝对路径。

【讨论】:

您可能想向 OP 解释什么是“绝对路径”,正如 OP 所说“工作正常,但与绝对路径相同”。【参考方案2】:

请执行以下操作:

   if(!@copy($orig_preview, $dest_preview))
    
        $errors= error_get_last();
        echo "COPY ERROR: ".$errors['type'];
        echo "<br />\n".$errors['message'];
     else 
        echo "File copied from remote!";
    

说说你看到了什么错误?

绝对路径也应该是这样的:

   $abs =  $_SERVER['PHP_SELF'];

抱歉发布为答案,无法发布为评论

【讨论】:

是的,它给出:复制错误:2 副本(httu://www.mysite.öä/mm_img/MM-1167-preview.jpg):无法打开流:HTTP 包装器不支持可写连接。在对绝对路径和公共路径不那么无知之后,它提供了从远程复制的文件!谢谢大家!

以上是关于php copy() 使用目标绝对路径的主要内容,如果未能解决你的问题,请参考以下文章

php获取上级文件绝对路径

PHP:从绝对 URL 获取绝对路径

文件的相对路径和绝对路径以及根相对路径

PHP获取文件绝对路径的代码(上一级目录)

PHP 使用绝对或相对路径重定向

相对路径与绝对路径的含义