fopen $_SERVER[REQUEST_URI]

fopen $_SERVER[REQUEST_URI]

我需要 fopen 一个与 url 同名且末尾为“.txt”的文件。

我有这个:fopen("$_SERVER[REQUEST_URI].txt", 'a+')

但我认为 url 开头的正斜杠搞砸了。

您可能应该 trim URI,但是这看起来……非常不安全。

$filename = trim($_SERVER['REQUEST_URI'], "/");
$filename .= ".txt";

$handle = fopen($filename, "a+");

为了阐明为什么这是不安全的,人们可以使用它来访问该目录中的任何文件。

您可能应该有一个人们可以访问的 "allowed files" 数组,然后检查给定文件是否在该数组中。例如:

$allowed_files = array(
    "file1.txt",
    "file2.txt",
);

$filename = trim($_SERVER['REQUEST_URI'], "/");
$filename .= ".txt";

if(in_array($filename, $allowed_files)){
    //Success, so they may view the file
    $handle = fopen($filename, "a+");
}else{
    //Failure, they may not
    return false;
}

为了保持通用性,试试这个:

//Validate the filename
$filename = $_SERVER["REQUEST_URI"];
$slashes = explode("/", $filename);
$filename = $slashes[1];
$filename .= ".txt";

$handle = fopen($filename, "a+");

也许您想使用 __FILE__ 常量:

$fp = fopen(preg_replace('/\..+$/', '.txt', __FILE__), 'a+');

当然,您的代码必须在正确的页面上。