[РЕДАКТИРОВАТЬ: исправлены опечатки и обновлен скрипт]
Здравствуйте,
Я пытаюсь перечислить файлы, хранящиеся на удаленном сервере, и сохранить этот список в файле XML, который будет использоваться в программе обновления программного обеспечения. Для этого я написал рекурсивную функцию, которая для каждого файла вызывает другую функцию, которая записывает всю необходимую информацию (имя файла, md5 ha sh и путь).
Однако, похоже, что он перечисляет только первый набор подкаталогов, когда мне нужна функция для go в нижней части дерева файлов.
Вот код, который я использую, если кто-то может сказать мне, что мне не хватает?
<?php
error_reporting(E_ALL);
ini_set('display_errors', 1);
function writeXml($pathInfo)
{
if(!file_exists("file_listing.xml"))
{
//XML creation
$dom = new DomDocument("1.0", "ISO-8859-15");
$dom->preserveWhiteSpace = false;
$dom->formatOutput = true;
$root = $dom->createElement("FileList");
$dom->appendChild($root);
echo "Treating ".$pathInfo['basename']." in ".$pathInfo['dirname']."<br>";
$xmlNodeFile = $dom->createElement("Name");
$xmlNodeFileText = $dom->createTextNode($pathInfo['basename']);
$root->appendChild($xmlNodeFile);
$xmlNodeFile->appendChild($xmlNodeFileText);
$xmlPath = $dom->createElement("Path");
$xmlPathText = $dom->createTextNode($pathInfo['dirname'].DIRECTORY_SEPARATOR.$pathInfo['basename']);
$xmlNodeFile->appendChild($xmlPath);
$xmlPath->appendChild($xmlPathText);
echo "----Directory : ".$pathInfo['dirname']."<br>";
$xmlMd5 = $dom->createElement("MD5");
$fileMd5 = md5_file($pathInfo['dirname'].DIRECTORY_SEPARATOR.$pathInfo['basename']);
$xmlMd5Text = $dom->createTextNode($fileMd5);
$xmlNodeFile->appendChild($xmlMd5);
$xmlMd5->appendChild($xmlMd5Text);
echo "----MD5 : ".$fileMd5."<br>";
$xmlSha1 = $dom->createElement("SHA1");
$fileSha1 = sha1_file($pathInfo['dirname'].DIRECTORY_SEPARATOR.$pathInfo['basename']);
$xmlSha1Text = $dom->createTextNode($fileSha1);
$xmlNodeFile->appendChild($xmlSha1);
$xmlSha1->appendChild($xmlSha1Text);
echo "----SHA1 : ".$fileSha1."<br>";
$dom->save('file_listing.xml');
echo $pathInfo['basename']." written. <br><br>";
}
elseif(file_exists("file_listing.xml"))
{
//XML loading
$dom = new DomDocument();
$dom->preserveWhiteSpace = false;
$dom->formatOutput = true;
$dom->load("file_listing.xml", LIBXML_PARSEHUGE);
$root = $dom->documentElement;
echo "Treating ".$pathInfo['basename']." in ".$pathInfo['dirname']."<br>";
$xmlNodeFile = $dom->createElement("Name");
$xmlNodeFileText = $dom->createTextNode($pathInfo['basename']);
$root->appendChild($xmlNodeFile);
$xmlNodeFile->appendChild($xmlNodeFileText);
$xmlPath = $dom->createElement("Path");
$xmlPathText = $dom->createTextNode($pathInfo['dirname'].DIRECTORY_SEPARATOR.$pathInfo['basename']);
$xmlNodeFile->appendChild($xmlPath);
$xmlPath->appendChild($xmlPathText);
echo "----Directory : ".$pathInfo['dirname']."<br>";
$xmlMd5 = $dom->createElement("MD5");
$fileMd5 = md5_file($pathInfo['dirname'].DIRECTORY_SEPARATOR.$pathInfo['basename']);
$xmlMd5Text = $dom->createTextNode($fileMd5);
$xmlNodeFile->appendChild($xmlMd5);
$xmlMd5->appendChild($xmlMd5Text);
echo "----MD5 : ".$fileMd5."<br>";
$xmlSha1 = $dom->createElement("SHA1");
$fileSha1 = sha1_file($pathInfo['dirname'].DIRECTORY_SEPARATOR.$pathInfo['basename']);
$xmlSha1Text = $dom->createTextNode($fileSha1);
$xmlNodeFile->appendChild($xmlSha1);
$xmlSha1->appendChild($xmlSha1Text);
echo "----SHA1 : ".$fileSha1."<br>";
$dom->save('file_listing.xml');
echo $pathInfo['basename']." written. <br><br>";
}
} //endof writeXml function
function scanRecursToXml($dirToScan = '.') //scandir recursive function
{
//echo "Reading in ".$dirToScan.DIRECTORY_SEPARATOR."<br>";
$dir = opendir($dirToScan);
while(false !== ($file = readdir($dir)))
{
//Skip '.' and '..'
if($file == '.' || $file == '..')
{
continue;
}
$followUp = $dirToScan.DIRECTORY_SEPARATOR.$file;
if(!is_dir($file) && $file != 'index.php' && $file !='file_listing.php' && $file !='file_listing.xml')
{
echo "Listing ".$file." in ".$dirToScan."<br>";
$filePathInfos = realpath($followUp);
writeXml(pathinfo($filePathInfos));
}
elseif (is_dir($followUp))
{
scanRecursToXml($followUp);
}
}
closedir($dir);
} //endof scanRecurs function
//We start the process with a scanRecurs()
$localDir = '.';
scanRecursToXml($localDir);
//In the end, we check the presence of the XML file
if(file_exists('file_listing.xml'))
{
echo "Done";
}
else
{
echo "Something went wrong :s";
}
?>
Спасибо.