2014-10-23 10 views
0

Я пытаюсь создать своего рода загрузчик «selfie» на мобильных телефонах. Теперь он отлично работает, это просто, когда я тестирую файл загрузки на своем iPhone, все фотографии будут называться image.jpeg, чтобы они переписывали друг друга. Теперь, что я хочу сделать, переименуйте файл, чтобы, скажем, image1.jpeg и следующий image2.jpeg, прежде чем он будет загружен на сервер.Переименование файла перед загрузкой на сервер

Мой текущий код:

<?php 
if (isset($_FILES['myFile'])) { 
move_uploaded_file($_FILES['myFile']['tmp_name'], "uploads/" . $_FILES['myFile'] ['name']); 
echo 'successful'; 
} 
?> 

Я попробовал этот код, чтобы дать своему изображению значение имени файла изображения плюс случайное число в диапазоне от 1 до 99999, но это не было Сукчес.

<?php 
if (isset($_FILES['myFile'])) { 

$temp = explode(".",$_FILES["myFile"]["name"]); 
$newfilename = rand(1,99999) . '.' .end($temp); 
move_uploaded_file($_FILES["myFile"]["tmp_name"], "uploads/" . $newfilename; 
echo 'successful'; 
} 
?> 

Любые указатели будут оценены.

+3

И какие ошибки вы получаете? 'move_uploaded_file ($ _ FILES [" myFile "] [" tmp_name "]," uploads/". $ newfilename;' неверно, используйте 'move_uploaded_file ($ _ FILES [" myFile "] [" tmp_name "]," uploads/". $ newfilename); '(вам не хватало закрывающей скобки) ... наконец, вы должны придумать что-то более рандомизированное, так как вы можете легко столкнуться с вашим существующим кодом. Попробуйте использовать' sha1 (uniqid (mt_rand(), true)) 'вместо' rand (1,99999) ' – sjagr

+0

Wow .. Извините, что это было, спасибо haha! – user2099810

+0

Вместо использования' rand() 'вы можете добавить текущую временную метку с помощью функции' time() '. Вы избегаете столкновения. – marian0

ответ

2

Это не было успешным.

Не описательный способ описания вашей ошибки. Пожалуйста, включите ошибки PHP или исследуйте их самостоятельно, чтобы вы (или мы) могли выяснить, какие проблемы у вас возникают с вашим кодом. Некоторые редакторы даже скажут вам, где ваши ошибки синтаксического анализа. Вы также можете использовать PHP linter.

Ошибка заключается в этой строке:

move_uploaded_file($_FILES["myFile"]["tmp_name"], "uploads/" . $newfilename; 

move_uploaded_file функция недостающую закрывающую скобку, так что вы должны положить его обратно в:

move_uploaded_file($_FILES["myFile"]["tmp_name"], "uploads/" . $newfilename); 

Я также рекомендую лучше случайных генератор имен файлов. Попробуйте что-нибудь подобное вместо этого:

$newfilename = sha1(uniqid(mt_rand(), true)) . '.' .end($temp); 

Это создаст хэш has a much lower likelihood of collisions (читай:. 1 в 2)

удачи!

+0

Извините за парни пакиповерса паники, не хватает скобки :( – user2099810

0

Я думаю, что ваш подход не совсем корректен.

Переименование файла на стороне клиента предполагает, что каждый клиент будет иметь уникальное соглашение об именах файлов. Однако на практике это было бы невозможно, если не очень сложно реализовать.

Однако вы можете значительно изменить соглашение об именах файлов на сервере.

<?php 
if (isset($_FILES['myFile'])) { 

$userid = 1; // User id loaded from database or some other way to identify user 
$temp = explode(".",$_FILES["myFile"]["name"]); 

// Create a distinct name for the file 
$newfilename = $userid . '.' . date_timestamp_get() '.' .end($temp); 

move_uploaded_file($_FILES["myFile"]["tmp_name"], "uploads/" . $newfilename); 
echo 'successful'; 
} 
?> 

Приведенный выше код, а не с помощью генератора случайных чисел, обеспечивают уникальный ключ на основе идентификатора пользователя, и текущий штамп времени, вместе с именем файла. Могут также использоваться другие варианты, такие как GUID.

+0

Вам также не хватает скобки, такая же ошибка, как и у OP. –

+0

@ Fred-ii- Когда вы слышите копыта, вы думаете, что лошади, а не зебры. – sjagr

+0

@Fred -ii- Радости копии пасты :). OP описал проблему как файлы, которые были перезаписаны, поэтому не заплатил подробные действия для кода. – Kami

Смежные вопросы