2012-02-20 54 views
1

我有一个图像在我的服务器上的目录中,并且想要将其复制到另一个目录。PHP复制()创建一个空的图像文件

所以我用

$post_picture = 'http://mysite.com/image.jpg'; 

copy($post_picture, 
     'images/pictures/post/thumb/' . 
     $info['filename'] . 
     '_thumb.' . 
     $info['extension']); 

的问题是,实际上是一个文件在我的thumb目录中创建的,但这种形象是空的(0×0像素)。我没有得到任何错误。

任何想法发生了什么?

所有目录的权限都是755,原始图像和复制图像都有644个。原始文件通常在浏览器上显示。

谢谢。

+2

它是一个空文件,或者是一个为0x0像素的图片? – 2012-02-20 17:13:15

+0

为什么你使用图片网址而不是正常路径?这不是你的服务器上的图像? PHP能够获取URL(请参阅* allow_url_fopen *选项)? – 2012-02-20 17:14:22

+0

allow_url_fopen选项是(本地和主) – pepe 2012-02-20 17:27:54

回答

3

你有任何形式的热链接保护,可以改变什么PHP接收? 是否允许allow_url_fopen?

+1

看起来像'copy()'因为我的.htaccess中的重定向而失败 - 一旦我评论到文件显示正常 - 感谢指出 - 我现在使用完整的系统路径而不是URL,它甚至可以工作重定向 – pepe 2012-02-20 17:34:42

1

$post_picture变量应该可能有文件系统路径的文件,而不是该文件的URL。

+1

'copy()'支持URL。我们不知道图像是否从同一台服务器获取。在问题评论中看到我的问题。 – 2012-02-20 17:15:21

+0

你说得对。当我快速检查php手册页时错过了它。 – Vex 2012-02-20 17:21:02

0

allow_url_fopen在您的php.ini中设置为true?

有时,如果远程连接被阻止,可能会产生此结果。

0

$ post_picture应该是本地路径,我相信

copy('/path/image.jpg', ...); 
0

请使用一个...

<?php 
$source = 'f-1/2.jpg'; 
$destination = 'f-2/2.jpg'; 

$data = file_get_contents($source); 

$handle = fopen($destination, "w"); 
fwrite($handle, $data); 
fclose($handle); 
?> 
+0

你可以改变$ destination ='f-2/2.jpg'中的文件名; – 2012-02-20 17:39:43