php保存带有特定文件名的图像,不会互相覆盖

时间:2013-09-19 19:45:49

标签: php image save base64

我希望有人可以帮我解决这个PHP代码。 目前它只是将文件名为“img.png”的图像保存到服务器,但每次拍摄新的画布截图时,图像都会被覆盖。

我的目标是使用每个新屏幕截图为图像创建一个新的唯一(按时间顺序编号)文件名,并将其保存在服务器上。

到目前为止这里的PHP代码:

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

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

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

谢谢。 问候

6 个答案:

答案 0 :(得分:1)

尝试

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

这将使用包含当前日期和时间的文件名保存文件,例如

img_2013-09-19-21-50.png

答案 1 :(得分:0)

尝试使用会话变量递增计数器,如下所示:

<?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])); 
?>

答案 2 :(得分:0)

有几种方法可以做到,但最简单的方法是在图像名称中添加时间戳/日期戳。根据需要格式化名称。

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

答案 3 :(得分:0)

保留base64data结构使用它可以正常工作。

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

它会为每个图像文件提供一个随机数。

答案 4 :(得分:0)

使用uniqid()函数为文件名创建一个UID,或者创建一个文件夹,其中包含正在上传文件的用户名并保留原始文件名。第一个缺点是您必须将原始文件名保存到某个地方以便向用户显示。

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

答案 5 :(得分:0)

**

 
 /* simply for local time first give your continent then '/' then your country's 
 capital.
*/ 
   date_default_timezone_set('Asia/Dhaka');
    
    $now = new DateTime();
    $now = $now->format("Y-m-d H:i:s.u");
    
    $new_name = $now.$image;
  /*what you want to add just write with dot,such 
    $new_name = 'img'.$now.$image;
   */

**

相关问题