2009-09-25 104 views
0

我目前正在Joomla!网站。我正在使用Jumi扩展(它允许在Joomla!自己内部创建和执行自定义脚本)创建一个简单的文件上传工具。问题是,我得到以下错误:PHP图像上传麻烦

警告:副本(C:/xampp/htdocs/images/1253889508.jpg)[function.copy]:未能打开流:在没有这样的文件或目录C:\ XAMPP \ htdocs中\的Joomla \部件\ com_jumi \ jumi.php(25):行的eval()'d代码

违规代码如下:

//we will give an unique name, for example the time in unix time format 
$image_name=time().'.'.$extension; 
//the new name will be containing the full path where will be stored (images folder) 
$newname='C:/xampp/htdocs/images/'.$image_name; 
//we verify if the image has been uploaded, and print error instead 
$copied = copy($_FILES['image']['tmp_name'], $newname); 

完整代码可用here。一旦我得到这个工作,我会修改它,以满足我的网站的需求。

我不确定问题是否与Jumi有关的权限问题或是否存在其他问题。我能说的最好的是,无论什么原因,临时文件都没有被创建。

感谢您的任何提示,你可能有!

回答

6

试试这个:

if(move_uploaded_file($_FILES['image']['tmp_name'], $newname)){ 
    // move worked, carry on 
} 

,并使用相对路径,而不是绝对的。

+0

copy()确实是错误的方法,因为文件必须从临时目录中移出。 move_uploaded_file()以做一个副本从TMP目录 – NDM 2009-09-25 14:48:44

+1

我想说move_uploaded_file是更明智的选择,因为它显然是为了准确地解决这个问题,但它是你的代码:) – inkedmn 2009-09-25 14:56:34

+0

即使副本()现在工作,是它更好地尝试move_uploaded_file?另外,如果目录位于特定位置,我该如何使用相对路径? – 2009-09-25 14:57:06

0

正斜杠$namename路径而不是反斜杠?

+0

嗯......这看起来更正确,但我恐怕仍然会抛出同样的错误。尽管感谢可笑的快速反应! – 2009-09-25 14:47:38

+0

Windows允许您在路径名称中使用正斜杠。 – Powerlord 2009-09-25 14:48:10

+0

Windows同时接受,所以这可能不是溶剂 – Gerrit 2009-09-25 14:48:14

3

您的C:/ xampp/htdocs/images目录实际存在吗?
如果没有手动或使用的mkdir创建它()

也尽量使用常量DIRECTORY_SEPARATOR,而不是硬编码的斜线

你也应该使用move_uploaded_file()以本,而不是复制()函数。

并且从未硬编码绝对路径进入您的脚本!取而代之的是获得根路径并将其设置为一个常量,这主要是通过入口文件中的dirname()函数来完成的,但是joomla allready有一个常量可用于此目的。

+0

这是相当尴尬...我忘了htdocs和图像之间的目录。谢谢,伙计!我也一定会使用DIRECTORY_SEPERATOR。 – 2009-09-25 14:51:20

+0

copy()是这样做的错误方法! – markus 2009-09-25 14:53:30

+0

他应该使用绝对路径,但不能硬编码.... – NDM 2009-09-25 14:58:28