我需要将文件另存为name_01,name_02

时间:2019-06-05 15:55:36

标签: php

您好,我需要将图像名称另存为name_01,name_02 但是我尝试了5个多小时 请检查代码并帮帮我

if ($typeMessage == 'image') {
    $responseMedia = $bot - > getMessageContent($idMessage);
    if ($responseMedia - > isSucceeded()) {
        //  getRawBody() binary 

        $dataBinary = $responseMedia - > getRawBody(); // return binary
        // get file type from header
        $fileType = $responseMedia - > getHeader('Content-Type');

        if (preg_match('/image/', $fileType)) {

            list($fileType, $ext) = explode("/", $fileType);
            $ext = ($ext == 'jpeg' || $ext == 'jpg') ? "jpg" : $ext;
            if (!file_exists($fileFullSavePath)) {
                $counter = 1;

                $fileNameSave = 'lamsam_'.$counter.
                ".".$ext;
                else if (file_exists($fileFullSavePath)) {
                    $counter++;
                    $fileNameSave = 'lamsam_'.$counter.
                    ".".$ext;
                }
            }
        }


        $botDataFolder = 'LAMSAM PAPER/'; // main save file folder
        $botDataUserFolder = $botDataFolder.$sourceType.$sourceId; // sub folder= sourceId 
        if (!file_exists($botDataUserFolder)) { // check if don't have folder sourceId
            mkdir($botDataUserFolder, 0777, true);
        }
        // path 
        $fileFullSavePath = $botDataUserFolder.
        '/'.$fileNameSave;
        file_put_contents($fileFullSavePath, $dataBinary);

我希望输出

  • lamsam_01.jpg
  • lamsam_02.jpg

但实际仅是

  • lamsam_01.jpg

2 个答案:

答案 0 :(得分:1)

首先,我们看不到任何循环,因此$counter不太可能影响任何事情,除非您如下所述循环。

您可以打开文件(fopen()),然后将数据写入(fwrite())。将数据写入其中后,您需要关闭(fclose())文件:

$fp = fopen('file.txt', 'a+'); //Append mode
// $fp = fopen('file.txt', 'w'); //Write mode
fwrite($fp, $data);
fclose($fp);    

fopen()Official Android Developer Documentation

fwrite()https://www.php.net/manual/en/function.fopen.php

fclose()https://php.net/manual/en/function.fwrite.php

循环播放:

这将遍历所有图像,并创建所需的命名约定:

从1开始$i,因此$i应当小于或等于$noOfFiles才能继续loop,显然,您可以使用其他方法来实现相同的目标,但理想情况下,除非您通过$_SESSIONcounter做一些聪明的事情,或者与它一起做一些聪明的JavaScript,否则我看不到您将如何获得{{1} }增加。

$counter

for($i = 1; $i <= $noOfFiles; $i++) { $fp = fopen('lamsam_' . $i .'.jpg', 'w'); fwrite($fp, $data[$i]); fclose($fp); } lamsam_1.jpg

您将需要计算循环的lamsam_2.jpg,并将图像数据存储在$noOfFiles数组中。

编辑以回复更新

您需要将所有图像文件数据(即每个图像)存储在$data中。因此$dataBinary必须是一个数组:

$dataBinary

所以..如果您使用$dataBinary = array( $image1BinaryData, $image2BinaryData, $image3BinaryData, $image4BinaryData, $image5BinaryData, $image6BinaryData, $image7BinaryData, $image8BinaryData, $image9BinaryData $image10BinaryData ); 获取图像,那么您要么希望它以数组的形式出现(如果您获取相同的图像,似乎只获取一个图像) ...或者您也想遍历可用的任何方法来获取想要的所有图像并将它们添加到数组中。

然后在循环中,使用$responseMedia->getRawBody()作为$i数组的索引,您还可以循环浏览要添加到每个文件的图像,而不仅仅是创建10个名称不同但名称不同的文件同一张图片:

$dataBinary

答案 1 :(得分:0)

for($i = 0; $i <= $num_files;) {
  $i++;
  $fp = fopen('lamsam_' . $i .'.jpg', 'w');
  fwrite($fp, $dataBinary);
  fclose($fp);
  $fp = $fileNameSave;
}

$num_file是我用于文件夹中计数文件的内容 他们显示lamsam_1.jpg适用于第一张照片 但他们再次执行相同的lamsam_1.jpg

,我已经尝试过 for($i = 0; $i <= 10;)

他们显示lamsam_1.jpglamsam_2.jpg ...直到lamsam_10.jpg,图像相同,但有10个名字