Per agganciare il commento di @ UTF-8 , usando PHP_Parser
, puoi facilmente generare un elenco di funzioni PHP predefinite non effettivamente utilizzate dalla tua applicazione che puoi quindi archiviare nel Opzione di configurazione disabled_functions
:
<?php
require 'vendor/autoload.php';
use PhpParser\Node;
use PhpParser\NodeTraverser;
use PhpParser\ParserFactory;
use PhpParser\NodeVisitorAbstract;
use PhpParser\PrettyPrinter\Standard;
use PhpParser\Node\Stmt\Class_;
use PhpParser\Node\Stmt\Function_;
class Collector extends NodeVisitorAbstract
{
public $functions = [];
public function leaveNode(Node $node)
{
if ($node instanceof PhpParser\Node\Expr\FuncCall)
$this->functions[] = (string) $node->name;
}
}
$sourcePath = __DIR__ . '/test/';
$files = new \CallbackFilterIterator(
new \RecursiveIteratorIterator(
new \RecursiveDirectoryIterator($sourcePath),
\RecursiveIteratorIterator::SELF_FIRST
),
function($current, $key, $iterator) { return preg_match('~.php$~i', (string) $current) > 0; }
);
$nodeTraverser = new NodeTraverser();
$nodeTraverser->addVisitor($visitor = new Collector());
$parserFactory = new ParserFactory();
$parser = $parserFactory->create(ParserFactory::PREFER_PHP7);
foreach ($files as $file)
{
$stmts = $parser->parse(file_get_contents((string) $file));
$nodeTraverser->traverse($stmts);
}
$defined_functions = get_defined_functions();
$blocked_functions = array_diff($defined_functions['internal'], $visitor->functions);
echo 'disabled_functions = "', join(',', $blocked_functions), '"', PHP_EOL;
È possibile creare qualcosa di simile per disable_classes
, basta invece cercare PhpParser\Node\Expr\New_
.
Alcune cose da considerare:
- Il primo passo dovrebbe essere quello di ridurre la quantità di moduli caricati dall'istanza di PHP.
- Sarà noioso gestire questo.
- Avrai un brutto momento se utilizzi qualcosa in modo dinamico.
- L'impostazione di un'alta percentuale di% co_de potrebbe avere un impatto sulle prestazioni. Potresti considerare l'utilizzo della funzionalità di whitelist di Suhosin come suggerito dal link .