您好,我需要将图像名称另存为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);
我希望输出
但实际仅是
答案 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
,显然,您可以使用其他方法来实现相同的目标,但理想情况下,除非您通过$_SESSION
对counter
做一些聪明的事情,或者与它一起做一些聪明的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.jpg
,lamsam_2.jpg
...直到lamsam_10.jpg
,图像相同,但有10个名字