我有一个列出目录中所有文件的代码。代码看起来像这样:
//path to directory to scan
$directory = "../images/team/harry/";
//get all image files with a .jpg extension.
$images = glob($directory . "*.jpg");
//print each file name
foreach($images as $image)
{
echo "some.php?file=".$image;
}
在它所说的echo "some.php?file=".$image;
的链接部分中,我需要唯一地标识每个文件,然后将$ _GET或$ _POST或其他内容转发到下一页。但是,文件名可能包含特殊字符(变音符号),空格等,因为它们是由用户通过FTP上传的。在下一页中识别它们的好方法是什么?像ID,可能是base64_encode / decode或类似的东西? (仅仅使用计数器可能不可靠,因为文件可能会被删除,同时会导致错误的结果)
答案 0 :(得分:2)
Base64可能会很好地解决这个问题:
echo "some.php?file=".base64_encode($image);
并在接收获取查询的页面上:
$image=base64_decode($_GET['file']);
另一个建议是使用数据库来存储用户上传的文件。上传后,每个图像将存储在DB中,其中包含ID和文件名的示例列。然后你可以只分配GET var那个ID,然后在其他方面从给定的ID中提取文件名。
答案 1 :(得分:1)
请求的文件总是可能不存在。我认为首先生成一个md5字符串并传递它是个好主意。您应该检查生成的字符串是否存在以确定它是否可用。否则,一个简单的8个字符数就足够了,应该在上传时指定。如果文件被删除,则some.php
应该向用户显示错误。
我不会考虑使用base64,然后再在some.php
中对其进行解码。这个URL复制起来很长,可能会出现安全问题,但我希望PHP可以防止这些问题。此外,URL非常难以让用户意外更改base64并最终得到一个看似随机生成的图片......
答案 2 :(得分:0)
使用“urlencode / urldecode”清理文件名怎么样? http://www.php.net/manual/en/function.urlencode.php