php Скрипт для создания описания исходного кода: все файлы из папки (документация)
Primary tabs
Запускать так:
php src_doc.php --exclude="vendor;web/assets;uploaded;libs;compile" --out="source.html"
где:
- vendor;web/assets;uploaded;libs;compile -- список папок, которые нужно исключить
- src_doc.php - -имя файла скрипта
Сам Скрипт
Содержимое файла скрипта:
#!/usr/bin/env php
<?php
$options = [
'ext' => 'php',
'dir' => '.',
'exclude' => '',
'out' => '',
];
$options = parseArgs($options, $argv);
$extensions = getMultiArg($options['ext']);
$regex = '/(' . implode('|', array_map(function($v) {return '\.' . $v;}, $extensions)) . ')$/i';
$pwd = getcwd();
$directory = new RecursiveDirectoryIterator($pwd, FilesystemIterator::KEY_AS_PATHNAME | FilesystemIterator::CURRENT_AS_FILEINFO | FilesystemIterator::SKIP_DOTS);
$iterator = new RecursiveIteratorIterator($directory);
$regex = new RegexIterator($iterator, $regex, RecursiveRegexIterator::GET_MATCH);
$fout = $options['out'] ? fopen($options['out'], 'w') : STDOUT;
if (!$fout) {
fwrite(STDERR, 'Can\'t open file ' . $options['out'] . PHP_EOL);
exit;
}
fwrite($fout, <<<EOL
<style type="text/css">
.heading {
font-weight: bold;
}
.source {
white-space: pre;
}
</style>
EOL
);
$excludes = getMultiArg($options['exclude']);
foreach ($regex as $file => $val) {
$relative = substr($file, strlen($pwd) + 1);
$byPass = false;
foreach ($excludes as $exclude) {
if (0 == strncasecmp($relative, $exclude, strlen($exclude))) {
$byPass = true;
break;
}
}
if ($byPass) {
continue;
}
$source = str_replace(' ', ' ', htmlspecialchars(file_get_contents($file)));
fwrite($fout, '<h3 class="heading">' . $relative . '</h3>' . "\n");
fwrite($fout, '<pre class="source">' . "\n");
fwrite($fout, $source);
fwrite($fout, '</pre>' . "\n");
}
fclose($fout);
function parseArgs($options, $argv)
{
array_shift($argv);
foreach ($argv as $item) {
if (preg_match('/(?<key>[a-z]+)=(?<value>[^\ ]*)/i', $item, $matches)) {
if (isset($options[$matches['key']])) {
$options[$matches['key']] = $matches['value'];
} else {
fwrite(STDERR, 'Unknown option ' . $matches['key'] . PHP_EOL) ;
exit;
}
}
}
return $options;
}
function getMultiArg($val)
{
return array_values(array_filter(preg_split('/[, ;]/', $val)));
}
Спасибо за пример Н. Гр.
- Log in to post comments
- 2926 reads