本文整理汇总了PHP中AEFactory::getScanEngine方法的典型用法代码示例。如果您正苦于以下问题:PHP AEFactory::getScanEngine方法的具体用法?PHP AEFactory::getScanEngine怎么用?PHP AEFactory::getScanEngine使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类AEFactory
的用法示例。
在下文中一共展示了AEFactory::getScanEngine方法的2个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的PHP代码示例。
示例1: scan_directory
/**
* Scans a directory for files and directories, updating the directory_list and file_list
* private fields
*
* @return bool True if more work has to be done, false if the dirextory stack is empty
*/
private function scan_directory()
{
// Are we supposed to scan for more files?
if ($this->done_scanning) {
return true;
}
// Get the next directory to scan, if the folders and files of the last directory
// have been scanned.
if ($this->done_subdir_scanning && $this->done_file_scanning) {
if (count($this->directory_list) == 0) {
// No directories left to scan
return false;
} else {
// Get and remove the last entry from the $directory_list array
$this->current_directory = array_pop($this->directory_list);
$this->setStep($this->current_directory);
$this->done_subdir_scanning = false;
$this->done_file_scanning = false;
$this->processed_files_counter = 0;
}
}
$engine = AEFactory::getScanEngine();
// Break directory components
if (AEFactory::getConfiguration()->get('akeeba.platform.override_root', 0)) {
$siteroot = AEFactory::getConfiguration()->get('akeeba.platform.newroot', '[SITEROOT]');
} else {
$siteroot = '[SITEROOT]';
}
$root = $this->root;
if ($this->root == $siteroot) {
$translated_root = AEUtilFilesystem::translateStockDirs($siteroot, true);
} else {
$translated_root = $this->remove_path_prefix;
}
$dir = AEUtilFilesystem::TrimTrailingSlash($this->current_directory);
if (strtoupper(substr(PHP_OS, 0, 3)) == 'WIN') {
$translated_root = AEUtilFilesystem::TranslateWinPath($translated_root);
$dir = AEUtilFilesystem::TranslateWinPath($dir);
}
if (substr($dir, 0, strlen($translated_root)) == $translated_root) {
$dir = substr($dir, strlen($translated_root));
} elseif (in_array(substr($translated_root, -1), array('/', '\\'))) {
$new_translated_root = rtrim($translated_root, '/\\');
if (substr($dir, 0, strlen($new_translated_root)) == $new_translated_root) {
$dir = substr($dir, strlen($new_translated_root));
}
}
if (substr($dir, 0, 1) == '/') {
$dir = substr($dir, 1);
}
// get a filters instance
$filters = AEFactory::getFilters();
// Scan subdirectories, if they have not yet been scanned.
if (!$this->done_subdir_scanning) {
// Apply DEF (directory exclusion filters)
// Note: the !empty($dir) prevents the site's root from being filtered out
if ($filters->isFiltered($dir, $root, 'dir', 'all') && !empty($dir)) {
AEUtilLogger::WriteLog(_AE_LOG_INFO, "Skipping directory " . $this->current_directory);
$this->done_subdir_scanning = true;
$this->done_file_scanning = true;
return true;
}
// Apply Skip Contained Directories Filters
if ($filters->isFiltered($dir, $root, 'dir', 'children')) {
AEUtilLogger::WriteLog(_AE_LOG_INFO, "Skipping subdirectories of directory " . $this->current_directory);
$this->done_subdir_scanning = true;
} else {
AEUtilLogger::WriteLog(_AE_LOG_INFO, "Scanning directories of " . $this->current_directory);
// Get subdirectories
$subdirs = $engine->getFolders($this->current_directory);
// Error propagation
$this->propagateFromObject($engine);
// If the list contains "too many" items, please break this step!
$registry = AEFactory::getConfiguration();
if ($registry->get('volatile.breakflag', false)) {
// Log the step break decision, for debugging reasons
AEUtilLogger::WriteLog(_AE_LOG_INFO, "Large directory " . $this->current_directory . " while scanning for subdirectories; I will resume scanning in next step.");
// Return immediately, marking that we are not done yet!
return true;
}
// Error control
if ($this->getError()) {
return false;
}
if (!empty($subdirs) && is_array($subdirs)) {
$registry = AEFactory::getConfiguration();
$dereferencesymlinks = $registry->get('engine.archiver.common.dereference_symlinks');
if ($dereferencesymlinks) {
// Treat symlinks to directories as actual directories
foreach ($subdirs as $subdir) {
$this->directory_list[] = $subdir;
$this->progressAddFolder();
}
} else {
//.........这里部分代码省略.........
示例2: scanFiles
/**
* Steps the files scanning of the current directory
*
* @return boolean True on success, false on fatal error
*/
private function scanFiles()
{
$engine = AEFactory::getScanEngine();
list($root, $translated_root, $dir) = $this->getCleanDirectoryComponents();
// Get a filters instance
$filters = AEFactory::getFilters();
if (is_null($this->getFiles_position)) {
AEUtilLogger::WriteLog(_AE_LOG_INFO, "Scanning files of " . $this->current_directory);
$this->processed_files_counter = 0;
} else {
AEUtilLogger::WriteLog(_AE_LOG_INFO, "Resuming scanning files of " . $this->current_directory);
}
// Get file listing
$fileList = $engine->getFiles($this->current_directory, $this->getFiles_position);
// Error propagation
$this->propagateFromObject($engine);
// If the list contains "too many" items, please break this step!
if (AEFactory::getConfiguration()->get('volatile.breakflag', false)) {
// Log the step break decision, for debugging reasons
AEUtilLogger::WriteLog(_AE_LOG_INFO, "Large directory " . $this->current_directory . " while scanning for files; I will resume scanning in next step.");
// Return immediately, marking that we are not done yet!
return true;
}
// Error control
if ($this->getError()) {
return false;
}
// Do I have an unreadable directory?
if ($fileList === false) {
$this->setWarning('Unreadable directory ' . $this->current_directory);
$this->done_file_scanning = true;
} else {
if (is_array($fileList) && !empty($fileList)) {
// Add required trailing slash to $dir
if (!empty($dir)) {
$dir .= '/';
}
// Scan all directory entries
foreach ($fileList as $fileName) {
$check = $dir . basename($fileName);
if (_AKEEBA_IS_WINDOWS) {
$check = AEUtilFilesystem::TranslateWinPath($check);
}
// Do I need this? $dir contains a path relative to the root anyway...
$check = ltrim(str_replace($translated_root, '', $check), '/');
$byFilter = '';
$skipThisFile = $filters->isFilteredExtended($check, $root, 'file', 'all', $byFilter);
if ($skipThisFile) {
AEUtilLogger::WriteLog(_AE_LOG_INFO, "Skipping file {$fileName} (filter: {$byFilter})");
} else {
$this->file_list[] = $fileName;
$this->processed_files_counter++;
$this->progressAddFile();
}
}
}
}
// If the scanner engine nullified the next position we are done
// scanning for files
if (is_null($this->getFiles_position)) {
$this->done_file_scanning = true;
}
// If the directory was genuinely empty we will have to add an empty
// directory entry in the archive, otherwise this directory will never
// be restored.
if ($this->done_file_scanning && $this->processed_files_counter == 0) {
AEUtilLogger::WriteLog(_AE_LOG_INFO, "Empty directory " . $this->current_directory);
$archiver = AEFactory::getArchiverEngine();
if ($this->current_directory != $this->remove_path_prefix) {
$archiver->addFile($this->current_directory, $this->remove_path_prefix, $this->path_prefix);
}
// Error propagation
$this->propagateFromObject($archiver);
// Check for errors
if ($this->getError()) {
return false;
}
unset($archiver);
}
return true;
}