如何在用PHP调用mkdir之前验证目录名?

时间:2014-01-10 21:19:33

标签: php

我想创建一个函数来创建一个目录来存储文件系统中的照片。假设根目录中有一个名为“albums”的目录。页面上有一个表单,允许用户创建新专辑,该专辑将在“专辑”下创建一个子目录。

此外,我希望能够拥有嵌套的相册。创建新相册时,管理员可以使用正斜杠(/)分隔符提供相册名称,以递归方式创建此文件夹结构。

我正在使用目录,因为我希望能够通过直接FTP访问服务器来管理相册,以处理大量相册。每个照片目录都有一个可选的album.properties文件,可以将任何元数据与相册本身相关联(例如用于相册的缩略图)。

if (!is_admin()) die();
$album_name = $_GET['album_name'];
if ($album_name) {
   $directory = "/albums/" . $album_name;
   // TODO: How can I validate $album_name?
   if (file_exists($directory)) {
     echo "Album already exists, please choose a different name.";
   } else if (mkdir($album_name), 0777, true) { // Recursive is true
     echo "Album successfully created.";
   } else {
     // TODO: Is there a way to output a more detailed explanation?
     echo "The album could not be created.";
   }
}

请参阅PHP代码中的TODO标记。此外,如果您对我的方法有任何建议,那将非常有用。

请注意,直到最近我才决定使用目录和属性文件而不是数据库表来存储与相册/照片相关联的元数据,因为我最近才发现客户端希望使用FTP。

但是,我仍然需要拥有数据库表,以允许管理员为现有专辑分配权限。例如,管理员可以与公共或其他非管理员用户共享特定专辑。 /albums目录无法直接访问,而另一个.php将允许下载照片或读取元数据,但仅限授权用户。

编辑:

为我想要的内容添加更多说明:

  1. 要验证$album_name是否是有效的目录名,如果它无效,我想输出错误消息。另外,我想向用户解释如何选择有效的目录名称。

  2. 如果mkdir失败,我想输出更详细的消息,告诉用户他/她可以做些什么来纠正问题。

1 个答案:

答案 0 :(得分:1)

您可以使用正则表达式或只是检查mkdir是否成功。

请参阅此问题的答案以供参考: Check a string for a valid directory name

编辑1:

要检查mkdir函数是否成功,您可以先使用is_writable之类的php函数来检查您是否有权在该位置写入。如果没有,你可以让你的用户知道(但如果是这样的话,你应该考虑为什么他们试图在某个地方写他们没有许可)。否则,如果mk_dir函数失败,您将能够记录失败并稍后检查问题。除此之外,如果没有先调查问题,你可能不应该告诉用户