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() 使用目标绝对路径的主要内容,如果未能解决你的问题,请参考以下文章