如何在PHP中为临时文件指定目录?

如何在PHP中为临时文件指定目录?,php,function,file,class,temporary-files,Php,Function,File,Class,Temporary Files,我已经编写了一个PHP模板引擎,用于在执行之前将文本解析为有效的PHP代码。目前,我将该文件的一部分保存在内存中,然后在解析为有效的php代码后eval()。在对用户输入使用eval()的弊病进行了更多研究之后,我发现将解析后的内容写入一个文件,然后包含该文件更明智。我正在为此使用tmpfile()函数。到目前为止,它不起作用,此外,我不知道这个临时文件是在哪里创建的,我不希望我的模板解析器在用户的文件系统上游荡文件。我希望在模板解析器类所在的同一目录中创建此临时文件。 现在,问题是,tmpfi

我已经编写了一个PHP模板引擎,用于在执行之前将文本解析为有效的PHP代码。目前,我将该文件的一部分保存在内存中,然后在解析为有效的php代码后
eval()
。在对用户输入使用
eval()
的弊病进行了更多研究之后,我发现将解析后的内容写入一个文件,然后
包含该文件更明智。我正在为此使用
tmpfile()
函数。到目前为止,它不起作用,此外,我不知道这个临时文件是在哪里创建的,我不希望我的模板解析器在用户的文件系统上游荡文件。我希望在模板解析器类所在的同一目录中创建此临时文件。 现在,问题是,
tmpfile()
不接受此处所示的任何参数。 下面是我的模板解析器类

<?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

  }

}
函数在系统的
TMP
目录中创建文件。您可以使用
sys\u get\u temp\u dir()
获取它的位置

更多的控件将为您提供
tempnam()
。但别忘了自己打扫卫生

如果使用
tmpfile()
,则不必手动删除该文件。根据文件:

关闭时(例如,通过调用
fclose()
,或者当
tmpfile()
返回的文件句柄没有剩余引用时),或者脚本结束时,会自动删除该文件

包含文件内容,您可以尝试以下操作:

$filename = tempnam(sys_get_temp_dir());

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

include $filename;

unlink($filename);

我建议改为使用一些现代模板库,如或

尝试对文档进行简短的查看:出于好奇,从文件执行代码比从字符串执行代码更安全吗?是的。我知道存在
tempnam()
,如果为它指定的目录不存在或不可写,它也可能最终使用系统的
tmp
目录。好吧,我想确保
tmpfile()
在我交易另一个选项之前不能完全帮助我,这样就结束了。这里的这个函数
sys\u get\u temp\u dir()。有没有一种方法可以知道包括文件名在内的完整路径,有没有一个函数可以更改tmp文件路径?@lvaroGonzález
eval
警告
eval()
语言构造非常危险,因为它允许执行任意PHP代码。因此,不鼓励使用它。如果您已经仔细验证了除了使用此构造之外没有其他选择,请特别注意,在未在此链接中事先正确验证的情况下,不要将任何用户提供的数据传递到该构造中,此外,使用
set\u error\u handler()
无法捕获
eval()
中的解析错误。再加上其他函数,就有足够的理由不使用此函数了……此函数提供了指向
tmp dir
的路径,而不是创建的
文件名。是否有办法知道包含文件名的
完整路径
,是否有更改tmp文件路径的功能?@geoff6837文件将在您关闭后自动删除。您是对的。那么,如何使用
include$path\u to\u tmp\u文件将此文件的内容加载到当前脚本中