php сохранить изображение с определенным именем файла, не перезаписывая друг друга

Я надеюсь, что кто-то может помочь мне с этим php-кодом. На данный момент это просто сохранение изображения с именем файла «img.png» на сервере, но каждый раз, когда делается новый скриншот холста, изображение просто перезаписывается.

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

Вот код php до сих пор:

$data = $_REQUEST['base64data']; 
echo $data;

$image = explode('base64,',$data); 

file_put_contents('img.png', base64_decode($image[1])); 

Спасибо. С уважением


person Mazey    schedule 19.09.2013    source источник


Ответы (5)


Пытаться

$filename = 'img_'.date('Y-m-d-H-s').'.png';
file_put_contents($filename, base64_decode($image[1]));

Это сохранит ваш файл с именем файла, содержащим текущую дату и время, например.

img_2013-09-19-21-50.png
person Gottlieb Notschnabel    schedule 19.09.2013
comment
идеально, спасибо. Можно ли также получить IP-адрес пользователя, который щелкнул, или уникальные данные браузера для внедрения в имя файла? - person Mazey; 20.09.2013
comment
Вы можете включить информацию из переменной PHP $_SERVER. Например: $filename = 'img_'.$_SERVER['REMOTE_ADDR'].'.png';. - person Gottlieb Notschnabel; 20.09.2013

Попробуйте использовать переменную сеанса для увеличения счетчика следующим образом:

<?php
session_start();
if(!isset($_SESSION['counter'])){
    $_SESSION['counter'] = 0;
}
$_SESSION['counter']++;

$data = $_REQUEST['base64data']; 
echo $data;

$image = explode('base64,',$data); 

file_put_contents('img'.$_SESSION['counter'].'.png', base64_decode($image[1])); 
?>
person Andy Gee    schedule 19.09.2013

Есть несколько способов сделать это, но самый простой — просто добавить метку времени/даты к имени изображения. Отформатируйте имя как хотите.

$img_name = 'img'.date('YmdHisu').'.png'; // Date & time with microseconds
$img_name = 'img'.time().'.png'; // unix timestamp
person aynber    schedule 19.09.2013

Оставьте структуру данных base64, используйте эту, она будет работать нормально.

$fileName = preg_replace('#[^a-z.0-9]#i', '', $fileName); 
$image = explode(".", $fileName);

Каждому файлу изображения будет присвоено случайное число.

person Aitazaz Khan    schedule 19.09.2013
comment
Как это даст имени файла случайное число? Это только удалит все буквы и цифры из имени файла, не так ли? - person Gottlieb Notschnabel; 20.09.2013
comment
потому что я сделал это вот почему это даст. - person Aitazaz Khan; 20.09.2013
comment
имя останется прежним, но перед именем вы будете получать случайное число каждый раз, когда будете загружать изображение или какой-либо файл. - person Aitazaz Khan; 20.09.2013
comment
Заголовок stackoverflow.com/questions/18739864/ - person Aitazaz Khan; 20.09.2013
comment
посмотрите этот код, и вы поймете, что я хотел предоставить - person Aitazaz Khan; 20.09.2013
comment
Ты неправ! Это строка, которая создает случайное число в вашем имени файла: $fileName = $id . "(" . time() . rand() . ")." . $fileExt;. - person Gottlieb Notschnabel; 20.09.2013
comment
братан, я думаю, ты меня не понимаешь, я говорю, что имя файла останется прежним, но в скобках будет изменено случайное число. - person Aitazaz Khan; 22.09.2013
comment
Вы приводите мой аргумент здесь :-) - person Gottlieb Notschnabel; 30.09.2013
comment
потому что ты не понимаешь меня, хотя - person Aitazaz Khan; 02.10.2013
comment
Ваш код ничего не делает, но разбивает имя файла на точку. см. здесь. Но посмотрите, что он делает, когда вы добавляете строку, о которой я упоминал в своем комментарии выше. - person Gottlieb Notschnabel; 02.10.2013
comment
а над вашим комментарием я дал ссылку, где можно посмотреть всю программу. если вы не возражаете, идите и проверьте это - person Aitazaz Khan; 02.10.2013

либо создайте UID, используя функцию uniqid() для имени файла, либо создайте папку с именем пользователя, который загружает файл, и оставьте исходное имя файла. Недостаток первого заключается в том, что вам придется где-то сохранять исходное имя файла, чтобы показать его пользователю.

https://stackoverflow.com/a/4371988/2701758

person Mario.Hydrant    schedule 19.09.2013