我在服务器上有包含图像文件的文件夹。我正在尝试获取这些文件,然后进一步上传,但我认为我使用的是错误的功能。
我的代码:
$dir = "../uploads/".$folderimage."/";
if ($handle = opendir($dir)) {
while (false !== ($entry = readdir($handle))) {
if ($entry != "." && $entry != "..") {
echo "$entry\n";
$handle = fopen($entry,"wb");
$mug->images_upload(array( "AlbumID" => "#####", "File" => $handle));
}
}
closedir($handle);
}
不确定我在做什么,我需要做的就是将文件传递给类函数$mug->images->upload
。它适用于$_POST
请求,但我需要将已上传的文件移动到该文件夹。
答案 0 :(得分:0)
模拟$ mug对象的文件上传POST请求有点棘手。如果您可以在$ mug中重构代码,那将会更好:
答案 1 :(得分:0)
如果$mug->images_upload
期待文件路径,则将$dir.$entry
传递给它
<?php
$dir = "../uploads/".$folderimage."/";
if ($handle = opendir($dir)) {
while (false !== ($entry = readdir($handle))) {
if ($entry != "." && $entry != "..") {
echo $entry.PHP_EOL;
$mug->images_upload(array( "AlbumID"=>"#####", "File"=>$dir.$entry));
}
}
closedir($handle);
}
//Or simpler way but slightly slower
foreach (glob($dir."*.{png,jpg,gif}", GLOB_BRACE) as $file) {
echo $file.PHP_EOL;
$mug->images_upload(array( "AlbumID"=>"#####", "File" =>$dir.$file));
}
?>
答案 2 :(得分:0)
您发布的代码存在许多明显的问题。
$dir = "../uploads/".$folderimage."/";
if ($handle = opendir($dir)) {
while (false !== ($entry = readdir($handle))) {
if ($entry != "." && $entry != "..") {
echo "$entry\n";
$handle = fopen($entry,"wb");
$mug->images_upload(array( "AlbumID" => "#####", "File" => $handle));
}
}
closedir($handle);
}
冲突变量。
您已使用$handle
vairable存储目录句柄,以后稍后使用循环内的文件资源覆盖它。一旦你在循环中覆盖它,下一次调用readdir($handle)
没有任何意义,你是在文件资源上调用该函数。这可能很容易导致无限循环,因为当给readdir()
垃圾时,它可能会返回NULL
。
fopen()
鉴于$folderimage = "images"
和$entry = "photo.jpg"
,fopen()
行会尝试在photo.jpg
而不是../uploads/images/photo.jpg
打开图片。您可能希望使用$dir . $entry
之类的内容,但请继续阅读,因为您根本不应该使用fopen()
。
phpSmug库的使用不正确
File
参数必须是字符串,其中包含“正在上传的本地文件的路径”(source)。您尝试将文件资源从fopen()
传递给它。
opendir()/readdir()
是古老的
有更好的方法来遍历PHP中的目录内容。如Lawrence's answer中所述,glob()
可能很有用。
我还提倡使用filesystem iterator中的SPL。
$dir = "../uploads/$folderimage/";
foreach (new FilesystemIterator($dir) as $fileinfo) {
$image_pathname = $fileinfo->getPathname();
$mug->images_upload("AlbumID=#####", "File=$image_pathname");
}