Stránka 1 z 1

PHP - načtení a přejmenování souboru

Napsal: 08 lis 2021 17:42
od Hyko
Dobrý den,
poprosil bych o radu, kdy se mi na FTP ukládá snímek z kamery, ale vždy pod jiným jménem (nastavení kamery neumožňuje jiné nastavení) a potřebuji poslední snímek přejmenovat třeba snimek.jpg nejlépe v PHP. Snímky se posílají každou minutu. spouštění skriptu bych pak vyřešil asi pomoci CRONu.

Děkuji za odpovědi (nejsem programátor).

Re: PHP - načtení a přejmenování souboru

Napsal: 08 lis 2021 18:06
od rhsCZ
možná něco takového

Kód: Vybrat vše

<?php
$dir = './img/';
$files = scandir($dir);
foreach($files as $file) {
   echo $file;
   if($file != "snimek.jpg")
   {
      rename($dir.$file, $dir."snimek.jpg");
   }
}
?>

pokud ti nejde o ukládání obrázků. Nevim jestli to bude fungovat. je to nástřel od oka.
je nutno opravit proměnnou $dir. Jinak "./" je současný adresář a "../" je nadřazený adresář.

Re: PHP - načtení a přejmenování souboru

Napsal: 08 lis 2021 18:12
od ITCrowd
Na to asi nebude nutné php. Mohlo by stačit napsat skript v bash, vypadal by asi nějak takhle:

Kód: Vybrat vše

mv /cesta/snimek.jpg $(date '+%Y%m%d%H%M.jpg')

Když ho budeš spouštět každou minutu, tak přejmenuje snimek.jpg na YYYYMMDDHHMM.jpg. Ale muselo by se ošetřit co udělá, když ho nenajde. Nějaký linuxák by určitě věděl.

Re: PHP - načtení a přejmenování souboru

Napsal: 08 lis 2021 18:19
od Hyko
Jde o snimkovani z webkamery na stranky, tak bych potrebovaly aby jmeno souboru bylo stejny az se bude stranka/snimek aktualizovat

Re: PHP - načtení a přejmenování souboru

Napsal: 08 lis 2021 18:23
od rhsCZ
Jestli to jsou stránky u nějakého hostingu, tak nejspíš nemá šanci se dostat k bash skriptům, ale cron by měl mít snad každý.

Re: PHP - načtení a přejmenování souboru

Napsal: 08 lis 2021 18:31
od ITCrowd
Ajo, já to pochopil naopak... :oops:

Re: PHP - načtení a přejmenování souboru

Napsal: 08 lis 2021 22:18
od Hyko
rhsCZ píše:možná něco takového

Kód: Vybrat vše

<?php
$dir = './img/';
$files = scandir($dir);
foreach($files as $file) {
   echo $file;
   if($file != "snimek.jpg")
   {
      rename($dir.$file, $dir."snimek.jpg");
   }
}
?>

pokud ti nejde o ukládání obrázků. Nevim jestli to bude fungovat. je to nástřel od oka.
je nutno opravit proměnnou $dir. Jinak "./" je současný adresář a "../" je nadřazený adresář.


jen pro upřesnění ta kamera ukládá ty snímky v tomto tvaru P21110817133310.jpg jestli to pomůže.

Re: PHP - načtení a přejmenování souboru

Napsal: 08 lis 2021 23:34
od ITCrowd
Podle toho kódu je uplne jedno, jak se ten soubor jmenuje.
Soustred se na ten adresář ./img. Místo toho dopln skutečný adresář.

Re: PHP - načtení a přejmenování souboru

Napsal: 09 lis 2021 23:02
od cervcek
Na ten PHP script pozor, nebude fungovat tak, jak bylo nejspíše zamýšleno.

PHP funkce rename() přepisuje soubory, pokud už dané jméno existuje (If renaming a file and newname exists, it will be overwritten.) a ve skriptu se všechny soubory přejmenovávají na totéž statické jméno, tedy dojde k promazání všech fotek z adresáře a ponechání pouze té poslední, která projde cyklem z toho důvodu je zbytečná i ta podmínka. Asi by bylo vhodnější pojmenovávat ten soubor s nějakou dynamickou příponou, nebo nejprve přejmenovat předchozí soubor, aby nedošlo k jeho přepsání? Navíc v podmínce dochází k porovnání celého souboru (nikoliv jen názvu) se stringem "snimek.jpg", což s největší pravděpodobností nebude nikdy vyhodnoceno jinak než TRUE, takže je podmínka z dalšího důvodu zde zbytečná. Vyhledávání stringu v názvu souboru můžeš udělat např. přes funkci strpos(), nebo načíst soubor do pole a pak porovnávat příslušný index, ale to je na můj vkus zbytečně kostrbatý. Navíc není ošetřen případ, kdy scandir() nenajde soubory a vrátí FALSE. Doporučení na závěr: používej dokumentaci PHP, když funkci používáš prvně, nebo po delší době.

TO ITCrowd: bash ti při nenalezeném souboru vyhodí jen chybu do konzole, takže buď na konci příkazu chybu zahodit přes "2>/dev/null", nebo zapisovat do nějakýho logu skrze "2>>/log.txt" a dávat pozor, aby byly šipky dvě, jinak to nepřidá data na konec, ale přepíše to soubor. Pokud je ten příkaz mv uprostřed pipeliny, pak tee command místo šipek.

Re: PHP - načtení a přejmenování souboru

Napsal: 10 lis 2021 15:06
od rhsCZ
O uchování původních obrázku nebyla řeč - autor nikde nezmínil, že by chtěl úchovávat obrázky. Jinak pokud se nic nenajde, tak se prakticky nic nestane - vyzkoušeno. jakože ta podmínka je asi zbytečná, ale přišlo mi vhodné, aby se nepřejmenovával ten samý soubor na to stejný jméno. scandir bere jen názvy nikoliv obsah, tudíž $file je jen závislá na názvu nikoliv obsahu - mě to funguje zkoušel jsem. tudíž $file byl jen string s názvem souboru. sice scandir vyhodí i "."(současný adresář) a ".."(nadřazený adresář) ale nemá to vliv na nic.

Dodatečně přidáno po 3 minutách 59 vteřinách:
menší úprava pro spokojenost :D

Kód: Vybrat vše

<?php
$dir = './img/';
$files = scandir($dir);
if($files != false)
{
foreach($files as $file) {
      echo $file."-out if<br>";
      if($file != "snimek.jpg" || $file != "." || $file != ".." )
      {
         echo $file." - in if<br>";
         rename($dir.$file, $dir."snimek.jpg");
      }
   }
}
?>