PHP - создание каталогов с уникальными именами (и объединение строк!) - PullRequest
0 голосов
/ 23 мая 2018

Я никогда раньше не использовал PHP, поэтому извиняюсь за основной вопрос.Я родом из C # и знаю, что я собираюсь спросить, что это пустяк в C #, но я просто удивился, почему он не работает должным образом для меня в PHP.

Итак, у меня естьФорма HTML и одно из полей имеют уникальный идентификатор автора, который содержит имя автора.Мне нужно создать папку на веб-сервере с этим именем автора, чтобы сохранить папки уникальными.Чтобы сделать это, я сделал следующее:

$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 'внутри корня веб-сервера.

Есть указания?Спасибо!

Ответы [ 2 ]

0 голосов
/ 23 мая 2018
$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 каталога.В противном случае вам нужно будет указать требуемый путь.

0 голосов
/ 23 мая 2018

Сначала я хотел бы предостеречь вас: вы делаете очень опасные вещи, например пытаетесь создать каталог, к которому у всего мира есть полный доступ.

Кроме того, лучшие практики - никогда не записывать данные в файловую систему.... потому что, как только вы станете лучше в этом, вы начнете использовать такие сервисы, как Heroku, где вы будете вынуждены следовать рекомендациям, потому что вы не можете использовать файловую систему так, как вы хотите.

IРекомендую сохранить файл изображения непосредственно в Amazon S3 (как обычно делают профессионалы).Вы можете получить Amazon PHP SDK, поэтому вам не нужно писать много кода, чтобы сделать это.На Stackoverflow есть множество примеров того, как использовать для этого AWS S3.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...