【问题标题】:php save image with specific file name not overwriting each otherphp保存具有特定文件名的图像不会相互覆盖
【发布时间】:2013-09-25 01:34:15
【问题描述】:

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

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

到目前为止的php代码:

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

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

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

谢谢。 问候

【问题讨论】:

    标签: php image save base64


    【解决方案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
    

    【讨论】:

    • 完美谢谢。是否也可以获取点击用户的IP或者唯一的浏览器数据实现到文件名中?
    • 您可能希望包含来自the PHP $_SERVER variable 的信息。例如:$filename = 'img_'.$_SERVER['REMOTE_ADDR'].'.png';.
    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

        【解决方案4】:

        让base64data结构使用这个就可以了。

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

        它会给每个图像文件一个随机数。

        【讨论】:

        • 如何给文件名一个随机数?这只会删除文件名中的所有字母和数字,不是吗?
        • 因为我已经做到了,所以它会给予。
        • 名称将保持不变,但在每次上传图片或文件时,名称前面都会得到一个随机数。
        • 查看此代码,您将清楚我想提供什么
        【解决方案5】:

        要么使用 uniqid() 函数为文件名创建一个 UID,要么使用上传文件的用户名创建一个文件夹并保留原始文件名。第一个的缺点是您必须将原始文件名保存在某个地方才能显示给用户。

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

        【讨论】:

          【解决方案6】:

          **

           
           /* 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;
             */

          **

          【讨论】:

            猜你喜欢
            • 2019-08-31
            • 1970-01-01
            • 2020-03-08
            • 2011-05-14
            • 2021-12-26
            • 2023-04-05
            • 1970-01-01
            • 2018-07-03
            • 2016-06-13
            相关资源
            最近更新 更多