我正在尝试在目录中创建一个文件列表,包括子目录中的文件列表,显示它们的完整路径,文件名和扩展名。任何指导都将不胜感激。
经过大量阅读后,我尝试了几件事,这是我发现并尝试的最新内容,但没有任何乐趣,因为现在我只是在寻找浏览器来显示上述信息。
$dir = '../test/images/';
function getFileList($dir, $recurse=false)
{
// array to hold return value
$retval = array();
// add trailing slash if missing
if(substr($dir, -1) != "/") $dir .= "/";
// open pointer to directory and read list of files
$d = @dir($dir) or die("getFileList: Failed opening directory $dir for reading");
while(false !== ($entry = $d->read())) {
// skip hidden files
if($entry[0] == ".") continue;
if(is_dir("$dir$entry")) {
$retval[] = array(
"name" => "$dir$entry/",
"type" => filetype("$dir$entry"),
"size" => 0,
"lastmod" => filemtime("$dir$entry")
);
if($recurse && is_readable("$dir$entry/")) {
$retval = array_merge($retval, getFileList("$dir$entry/", true));
}
} elseif(is_readable("$dir$entry")) {
$retval[] = array(
"name" => "$dir$entry",
"type" => mime_content_type("$dir$entry"),
"size" => filesize("$dir$entry"),
"lastmod" => filemtime("$dir$entry")
);
}
}
$d->close();
return $retval;
}
print_r($retval);
我的最终目标是创建一些执行时将在目录中查找的php,在新目录中创建具有相同名称的子目录(以及其中的所有子目录)(因此/ test / album /将创建为/现场/相册/)。然后调整每个原始目录中包含的所有图像的大小,并将它们保存到相关的新目录中。我很欣赏这很多,毫无疑问,我会继续提出许多问题,但会在以后保存这些问题。
答案 0 :(得分:3)
简单快捷:
echo '<pre>';
print_r($array); // where $array == array();
echo '</pre>';
答案 1 :(得分:3)
这是我为我的网站写的类似脚本:
<?php
$baseDir = '/images/test';
$newDir = '/images/live/';
$returnFiles = array();
function getDirectory($path, $level, $newDir, $baseDir, &$returnFiles) {
if(substr($path, -1) != DIRECTORY_SEPARATOR) {
$path = $path . DIRECTORY_SEPARATOR;
}
if(substr($newDir, -1) != DIRECTORY_SEPARATOR) {
$newDir = $newDir . DIRECTORY_SEPARATOR;
}
if(substr($baseDir, -1) != DIRECTORY_SEPARATOR) {
$baseDir = $baseDir . DIRECTORY_SEPARATOR;
}
$dh = opendir( $path );
if(!$dh) {
return;
}
while( false !== ( $file = readdir( $dh ) ) ) {
if($file == '.' || $file == '..') {
continue;
}
$ident = str_repeat("\t", $level);
if(is_file($path . $file)) {
if(substr(mime_content_type($path . $file), 0, 5) == 'image') {
$returnFiles[] = saveImage($path . $file, $newDir, $baseDir);
}
}
else if(is_dir($path . $file)) {
getDirectory($path . $file . DIRECTORY_SEPARATOR, $level+1, $newDir, $baseDir, $returnFiles);
}
}
closedir( $dh );
}
function saveImage($image, $newDir, $baseDir) {
$current = dirname($image) . DIRECTORY_SEPARATOR;
$path = str_replace($baseDir, $newDir, $current);
if(!is_dir($path)) {
mkdir($path, 0777, TRUE);
}
$oldImage = array(
"name" => $image,
"type" => mime_content_type($image),
"size" => filesize($image),
"lastmod" => filemtime($image)
);
// conver image
convertImage($image, $path);
$image = $path . basename($image);
$newImage = array(
"name" => $image,
"type" => mime_content_type($image),
"size" => filesize($image),
"lastmod" => filemtime($image)
);
return array('old' => $oldImage, 'new' => $newImage);
}
function convertImage($image, $folder) {
// do what you need to do to convert/resize etc..
// for demo purpose I simply copy the image.
copy($image, $folder . basename($image));
}
getDirectory($baseDir, 0, $newDir, $baseDir, $returnFiles);
print_r($returnFiles);
答案 2 :(得分:1)
回答你原来的问题,我发现使用var_dump($ array)确实有助于说明传递的数组结构,特别是多维。 Pus它为您提供了在您进步时可能有用的数据类型。
答案 3 :(得分:1)
以下是我在Ubuntu Forums处获取的一些代码,其中显示了给定路径中的所有目录及其子目录。
function recurse($path)
{
foreach(glob($path.'/*',GLOB_ONLYDIR) as $myDirectory)
{
// change this to whatever you need to do
echo "Directory : $myDirectory<br>\n";
// but keep this line
recurse($myDirectory);
}
}
这应该让你开始尝试做的事情。 您可能希望更改功能的名称以便清晰。