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+');
当然,您的代码必须在正确的页面上。
我需要 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+');
当然,您的代码必须在正确的页面上。