PHP - 创建具有唯一名称的目录(以及串联字符串!)

时间:2018-05-22 23:31:23

标签: php directory

我从未使用PHP,因此对基本问题道歉。我来自C#背景,并且知道我要问的是在C#中做的事情,但只是想知道为什么它在PHP中无法正常工作。

所以,我有一个HTML表单,其中一个字段的唯一ID是'author',其中包含作者的姓名。我需要在Web服务器上使用此作者名称创建一个文件夹,以保持文件夹的唯一性。为此,我做了以下事情:

$authorNameText = echo $_POST['author']; //store data in 'author' in a variable   
$authorNameDir = str_replace(" ", "-", authorNameText); //replace spaces in the 'author' field with dashes
$authorNameDir .= "-issue17"; //append 'issue17' to the end of the directory name 

所以说我在“作者姓名”字段中键入“jason brown”,将创建的文件夹称为“jason-brown-issue17”。

此文件夹需要位于名为“user-uploads”的目录中,因此我使用if语句检查此目录是否存在。

if (!file_exists('\\user-uploads\\'.$authorNameDir)) {
mkdir('\\user-uploads\\'.$authorNameDir, 0777, true);
}

我正在尝试将变量'authorNameDir'连接到'\ user-uploads \'文件路径字符串以创建文件路径。这是在PHP中执行此操作的正确方法吗?

然后将文件上传到目录(即图像),我使用以下代码:

$target_dir = '\\user-uploads\\'.$authorNameDir;

其余部分是W3School的例子,请参阅:https://www.w3schools.com/php/php_file_upload.asp

根据我得到HTTP 500错误或者我在我的网站的根目录中找到一个名为'\ user-uploads \ jason-brown-issue17 \ image.png'的文件(例如)来判断我的语法错了!不是100%肯定是什么,可能是因为我缺乏PHP经验而愚蠢!

我想要的是图像最终出现在名为'jason-brown-issue17'的子文件夹中(如果'jason brown'是HTML表单上作者字段的内容),在名为'user-uploads'的文件夹中在Web服务器的根目录内。

任何指导?谢谢!

2 个答案:

答案 0 :(得分:0)

首先我要提醒你:你正在做一些非常危险的事情,比如试图创建一个全世界都可以完全访问的目录。

此外,最佳做法是永远不要写入文件系统...因为一旦你对这些东西变得更好,你将开始使用像Heroku这样的服务,你被迫遵循最佳实践,因为你不能使用像你想要的文件系统。

我建议将图像文件直接保存到Amazon S3中(就像我们专业人员通常那样)。您可以获取Amazon PHP SDK,这样您就不必编写太多代码来完成这项工作。 Stackoverflow上有很多关于如何使用AWS S3执行此操作的示例。

答案 1 :(得分:0)

$authorNameText = echo $_POST['author'];

你不会在这里回应,因为你使用了一个赋值运算符=,只需将它设置为:

$authorNameText = $_POST['author'];
$authorNameDir = str_replace(" ", "-", authorNameText);

您忘记了$上的authorNameText,所以应该是:

$authorNameDir = str_replace(" ", "-", $authorNameText);
  

此文件夹需要位于名为' user-uploads'的目录中,   所以我使用if语句来检查这个目录是否存在。

我真的不会在脚本中执行此操作,尤其是不创建目录。并非没有考虑安全隐患。此外,如果这是核心映像目录,您不应该在脚本中创建或检查它,它应该已经作为必需的结构目录存在。

$target_dir = '\\user-uploads\\'.$authorNameDir;

错误的斜线,不知道为什么这么多。试试这个:

$target_dir = 'user-uploads/'.$authorNameDir;

这是一个相对路径,因此假设正在运行的脚本位于user-uploads目录的父级中。否则,您必须根据需要设置路径。