Я обнаружил, что экспорт PHP phpMyAdmin не включает тег <?php
в начале файла. То есть содержимое файлов выглядит примерно так:
/* `production`.`people` */
$people = array(
array('id' => '999','name_first' => ...
Вместо этого:
<?php
/* `production`.`people` */
$people = array(
array('id' => '999','name_first' => ...
По сути, это нарушает include
и require
, поскольку код будет интерпретироваться как HTML, а не PHP.
Как мне загрузить и запустить код, чтобы получить массив данных? Я знаю, что eval
— это плохо, но я не знаю других способов добиться этого.
Для справки: это будет выполняться только в средах разработки и тестирования, но не в рабочей среде.
Вы можете просто вручную добавить тег <?php
в начале содержимого файла, прежде чем включать его или требовать его. Это позволяет избежать использования eval
.
Это может помочь:
<?php
$filePath = 'path/to/file.php';
$fileContent = file_get_contents($filePath);
if (strpos($fileContent, '<?php') !== 0) {
$fileContent = "<?php\n" . $fileContent;
}
$tempFilePath = 'path/to/temp_file.php';
file_put_contents($tempFilePath, $fileContent);
include $tempFilePath;
unlink($tempFilePath);
print_r($people);
Вы можете превратить это в функцию.
eval
является злом при использовании с пользовательскими данными. Если вы доверяете данным, в данном случае, если вы доверяете phpMyAdmin, вы можете без проблем использоватьeval
. Если вы не доверяете данным, вы в любом случае не захотите ихinclude
.