создать два файла с разными расширениями с одним и тем же уникальным идентификатором

avatar
uEHT0
8 августа 2021 в 19:04
64
2
-2

Полагаю, это вопрос логики, но я не могу его решить. У меня есть код, который конвертирует любой видеофайл в mp4, но на данный момент я конвертирую только в .gif. Я хотел знать, как создать файлы .mp4 и .gif с одним и тем же уникальным идентификатором.

Я пробовал что-то вроде этого

$finalFilePath = $targetDir . uniqid() . ".gif" ".mp4";

Однако мне это не удалось. Это только один генератор файлов В данном случае это файл uniqueid.gif, который на самом деле является mp4. и цель состоит в том, чтобы сгенерировать оба с одним и тем же уникальным идентификатором.

Заранее большое спасибо. Приветствуется любая помощь.

обновите больше контента, чтобы спросить ---> Здравствуйте, используя этот код ниже, я могу сгенерировать 2 файла, но проблема в том, что генерируются два файла, но оба должны иметь одинаковый uniqid. однако они генерируются с разными именами, у меня возникают трудности с созданием переменной, которая хранит только один uniqid, это моя большая проблема.

 if(move_uploaded_file($videoData["tmp_name"], $tempFilePath)) {
            
            $finalFilePath = $targetDir . uniqid() . ".gif" ;
            $finalFilePath2 = $targetDir . uniqid() . ".mp4";


            if(!$this->insertVideoData($videoUploadData, $finalFilePath)) {
                echo "Insert query failed\n";
                return false;
            }
            
             if(!$this->convertVideoToMp4($tempFilePath, $finalFilePath2)) {
                echo "Upload failed\n";
                return false;
            }

Загрузка функции.

public function upload($videoUploadData) {

        $targetDir = "uploads/videos/";
        $videoData = $videoUploadData->videoDataArray;

        $tempFilePath = $targetDir . uniqid() . basename($videoData["name"]);
        $tempFilePath = str_replace(" ", "_", $tempFilePath);

        $isValidData = $this->processData($videoData, $tempFilePath);

        if(!$isValidData) {
            return false;
        }

        if(move_uploaded_file($videoData["tmp_name"], $tempFilePath)) {
            $finalFilePath = $targetDir . uniqid() . ".gif";

            if(!$this->insertVideoData($videoUploadData, $finalFilePath)) {
                echo "Insert query failed\n";
                return false;
            }


            return true;

        }
    }

Функция ConvertVideoToMp4

public function convertVideoToMp4($tempFilePath, $finalFilePath) {
        $cmd = "$this->ffmpegPath -i $tempFilePath -pix_fmt rgb24 -r 4 -vf scale=540:-1 $finalFilePath 2>&1";

        $outputLog = array();
        exec($cmd, $outputLog, $returnCode);
        
        if($returnCode != 0) {
            //Command failed
            foreach($outputLog as $line) {
                echo $line . "<br>";
            }
            return false;
        }

        return true;
    }

Источник
Nico Haase
8 августа 2021 в 19:07
1

Так в чем проблема? Вызов uniqid дважды приведет к созданию разных идентификаторов, но никто не мешает вам вызвать его один раз и сохранить результат в переменной, которая будет использоваться дважды.

uEHT0
8 августа 2021 в 20:24
0

Здравствуйте, спасибо за ваш ответ, да, моя большая проблема заключается в том, чтобы создать переменную, в которой хранится один и тот же uniqid, и перенаправить ее в $finalFilePath и $finalFilePath2. Это именно то, что вы сказали, но я понятия не имею, как создать переменную для использования в обоих выходных данных загруженного файла.

Nico Haase
9 августа 2021 в 06:06
0

Почему создание такой переменной является проблемой? Что вы пытались сделать это? Что именно с этим не работает? Только помните: не звоните по uniqid дважды.

Ответы (2)

avatar
Sohrab
8 августа 2021 в 19:15
2

Вызовите uniqid один раз, сохраните его в переменной и используйте сколько угодно раз. Я думаю, что лучший способ создать уникальный идентификатор:

$bytes = random_bytes(16);
echo bin2hex($bytes);

random_bytes() генерирует криптографически безопасные псевдослучайные байты. Кроме того, передав его вывод другой функции bin2hex(), вы получите уникальную случайную строку.

Nico Haase
10 августа 2021 в 05:36
0

Пожалуйста, добавьте некоторое объяснение к вашему ответу, чтобы другие могли извлечь из него уроки. Что заставляет вас думать, что это «лучший способ»?

avatar
YPLABS
10 августа 2021 в 00:20
1
$id = uniqid();
$finalFilePath = $targetDir . $id . ".gif" ;
$finalFilePath2 = $targetDir . $id . ".mp4";

Простой ;)