有人可以建议使用库来处理以下路径:/a/b/c.jpg
或http://asdf/sdf/fd.jpg
我需要获取目录或文件名字符串,类似于以下PHP filesystem functons提供的内容:
dirname
basename
答案 0 :(得分:3)
查看Flagrant Badassery博客的parseURI功能。它可以解析任何格式良好的URI。
答案 1 :(得分:1)
使用jQuery或任何Javascript,出于安全原因,您无法列出目录及其中的文件。
您可以使用正则表达式获取文件名:
var path = "/a/b/c.jpg",
filename = path.replace(/^.*(\\|\/|\:)/, '');
要获取您可以使用的文件的扩展名和基本名称(注意:,您还需要将其与上述代码一起使用):
var basename = filename.substr(0, filename.lastIndexOf( "." )),
extension = filename.substr(filename.lastIndexOf( "." )+1, filename.length);
如果确实需要获取目录列表,您可以使用PHP获取它并使用AJAX请求将其返回给客户端。绝对不推荐这样做,因为它很容易被滥用来列出安全或私有文件。我建议这样做的唯一例子是,如果您列出的目录肯定只包含您知道可以安全显示的文件,例如已上载的图像目录。要做到这一点,你会这样做:
目录中的PHP文件(index.php)
<?
// Set JSON headings
header('Cache-Control: no-cache, must-revalidate');
header('Expires: Mon, 26 Jul 1997 05:00:00 GMT');
header('Content-type: application/json');
// The directory to list
$this_directory = opendir(".");
// Loop through each file
while($file_name = readdir($this_directory)) {
// Add the files to an array
if($file_name != "." && $file_name != "..") $return_array[] = $file_name;
}
// Return the array as JSON
echo json_encode($return_array);
// Close the directory
closedir($this_directory);
?>
的Javascript
// Get the JSON from the PHP file
$.getJSON("img/", function(data){
// Loop through each file
for(var i = 0, j = data.length; i < j; i++) {
// Do whatever you want with the filename
console.log(data[i]);
}
});
同样,只在您知道将包含可以向世界显示的文件的目录上执行此操作。 永远不要向PHP文件传入一个选项来指定要列出的目录。例如,不要让PHP接受诸如“/home/site.com/sensitive_data/”之类的输入,因为它将允许攻击者随意列出您服务器上的任何目录。