функция — Как я могу указать каталог для временного файла в PHP?

Я написал PHP шаблонизатор для разбора текста в действительный код php перед выполнением. В настоящее время я храню этот файл в памяти eval() после разбора в действительный код php. После исследования больше о пороках использования eval() с пользовательским вводом я нашел более разумным записать проанализированный контент в файл, а затем include файл. я использую tmpfile() Функция для этого. До сих пор это не работает, кроме того, я не знаю, где этот временный файл создан, и я не хотел бы, чтобы мой парсер шаблонов слонялся в любом случае в файловой системе пользователя. Я хотел бы, чтобы этот временный файл был создан в том же каталоге, в котором находится класс анализатора шаблонов.
Теперь проблема в том, tmpfile() не принимает никаких параметров, как показано здесь http://php.net/manual/en/function.tmpfile.php .
Ниже приведен мой класс анализатора шаблонов

<?php
class TemplateParser {

//this method renders template file
public function render($file_path)
{
#...code to compile contents

//create temporary file and store handle
$file_handler = tmpfile();

//write contents to tmpfile()
fwrite($file_handler,$compiled_template_file_contents);

//close opened file
fclose($file_handler);

//include the file into the current script
include $file_handler; //this doesn't work, now what works?? coz this is not a valid filepath but a resource

}

}

Мне нужно знать путь к файлу, потому что я хочу быть уверенным, что я не оставляю мусор даже в случае фатальной ошибки или остановленного процесса с помощью вызова unlink($tmp_file_path) Любые идеи о том, как определить каталог для tmpfile() только во время выполнения этого скрипта? Буду признательна.

1

Решение

tmpfile() Функция создает файл в системе TMP реж. Где это вы можете получить с sys_get_temp_dir(),

Еще немного контроля дает вам tempnam(), Но не забывайте убирать за собой.

Если вы используете tmpfile() Вам не нужно удалять файл вручную. Согласно документации:

Файл автоматически удаляется при закрытии (например, путем вызова fclose()или когда нет оставшихся ссылок на дескриптор файла, возвращаемый tmpfile()) или когда сценарий заканчивается.

к include содержимое файла вы можете попробовать следующее:

$filename = tempnam(sys_get_temp_dir());

// create content with fopen(), fwrite(), fclose()

include $filename;

unlink($filename);

Я бы предложил вместо этого использовать некоторые современные библиотеки шаблонов, такие как всезнайка или же прут

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]