Diskuze: Nahrávání fotek z kamery na web
V předchozím kvízu, Online test znalostí PHP, jsme si ověřili nabyté zkušenosti z kurzu.


Nabizis job, upravte mi program na miru. Free verze je zadarmo. Ale u uprav na miru nikdo pod 500kc/h nepujde, protoze se s tim nevyplati piplat. zjistovat, jak to ten clovek udelal a pri upravach to nerozbit. Leda tak autor nebo podpora toho pluginu, ti uz se v tom vyznaji.
To, co popisujes by mohla byt uprava asi na 10 min. Samozrejme jsi nic sam
nezkusil, zadnou upravu, nedal jsem kod, takze vlastne nehledas pomoc, ale
pracovnika, ktery vse udela za tebe. A jeste, aby si hledat php kod. Tragedka,
takove dotazy
Takze, zbyva tedy moznost jen poradit s malickostmi, jako je zjistit posledni
editovany soubor ve slozce.
google = php opendir last edited file
"Get last modified file in a directory - Stack Overflow"
$files = array_merge(glob("img/*.png"), glob("img/*.jpg"));
$files = array_combine($files, array_map("filemtime", $files));
arsort($files);
$latest_file = key($files);
---
$path = null;
$timestamp = null;
$dirname = dirname(__FILE__);
$dir = new DirectoryIterator($dirname);
foreach ($dir as $fileinfo) {
if (!$fileinfo->isDot()) {
if ($fileinfo->getMTime() > $timestamp) {
// current file has been modified more recently
// than any other file we've checked until now
$path = $fileinfo->getFilename();
$timestamp = $fileinfo->getMTime();
}
}
}
var_dump($path);
---
function listdirfile_by_date($path)
{
$dir = opendir($path);
$list = array();
while($file = readdir($dir))
{
if($file != '..' && $file != '.')
{
$mtime = filemtime($path . $file) . ',' . $file;
$list[$mtime] = $file;
}
}
closedir($dir);
krsort($list);
foreach($list as $key => $value)
{
return $list[$key];
}
return '';
}
Jakoze ty 3 php kody jsou resenim pro vetu:
"Zkusil jsem: Zkusil jsem tedy přes pluginy, dokonce jsem i našel staré PHP
které ale umělo číst pouze statický název fotky (opět kamera to
neumí)."
Cili, ten php kod zjisti posledni editovany soubor a ten predas tomu php.
Ahoj. Děkuji za reakci. Každopádně hned bych tedy uvedl, že jsem
zkoušel různě kód upravit a změnit cílovou složku ale bez zkušenosti mi
to samozřejmě nefungovalo a celou stránku rozbilo. Nejsem php odborník.
Nehledám pracovníka, co vše udělá za mě. Dotaz byl jestli někdo umí php
upravit a jak. Jestli to vůbec jde Kontaktoval jsem i autora pluginu ale čím více zdrojů tím lépe.
Konkrétní php soubor můžu poskytnout jak budu v kanceláři.
Postřeh ale mám takový, že má uvedenou cestu na:
upload_dir(zdrojová složka) je nasměrován na wp_upload_dir což je
defaultní složka všech uploadů do wordpressu.
Mozna to vidis jen prislis slozite.
Podivej, WP je delany univerzalne. Cili, vsechny tyhle slozky a pod budou
presmerovane pres nejaky univerzalni config.
Ale, pokud potrebujes neco spesl a budes si to schopen pohlidat pri update
verzi, tak si muzes cely php kod prepsat u toho pluginu, dle libosti.
//$upload_dir = funkce_wp() // das to do komentu a napises si tam svoje
$upload_dir = '/webkamera/';
A vytvoris si tam tu slozku rucne. A nastavis ji linuxova prava pro zapis,
tusim 0755.
Brnkacka, ne?
Ale rikam, jedna se o jednorazovou zalezitost. Kdyz ten WP nekam zkopirujes,
budes zas muset celou akci delat rucne. Takze je vyhodnejsi, kdyz to ten plugin
umi uz sam, samozrejme.
Plugin Name: React Webcam
Version: 1.2.0
Author: Radek Matej
Description: Add auto-refreshing image from your webcam to any page.
*/
namespace ReactWebcam;
const WEBCAM_DIR = 'webcam';
const SUBDIR_ATTNAME = 'dir';
const REFRESHINT_ATTNAME = 'refreshinterval';
const REFRESHINT_DEFAULT = 60; // seconds
function init($atts) {
$atts = shortcode_atts(array(
REFRESHINT_ATTNAME => REFRESHINT_DEFAULT,
SUBDIR_ATTNAME => NULL
), $atts);
wp_register_script('react', plugins_url('js/vendor/react.min.js', __FILE__));
wp_enqueue_script('ReactWebcam_ActualImage', plugins_url('js/ActualImage.js', __FILE__), array('react'));
$upload_dir = wp_upload_dir();
$ajax_url = admin_url('admin-ajax.php');
$images_root_url = $upload_dir['baseurl'] . '/' . WEBCAM_DIR . '/';
if ($atts[SUBDIR_ATTNAME]) {
$images_root_url .= $atts[SUBDIR_ATTNAME] . '/';
}
$initial_image_filename = get_last_filename($atts[SUBDIR_ATTNAME]);
return '
<div class="react-webcam"
data-ajax-url="' . $ajax_url . '"
data-images-root-url="' . $images_root_url . '"
data-subdir="' . $atts[SUBDIR_ATTNAME] . '"
data-initial-image-filename="' . $initial_image_filename . '"
data-refresh-interval="' . $atts[REFRESHINT_ATTNAME] . '">
<img src="' . $images_root_url . $initial_image_filename . '" />
</div>';
};
// Returns filename of the last webcam image.
function get_last_filename($subdir) {
$upload_dir = wp_upload_dir();
$webcam_dir = $upload_dir['basedir'] . '/' . WEBCAM_DIR . '/';
if ($subdir && preg_match('/[a-z0-9]/i', $subdir)) {
$webcam_dir .= $subdir . '/';
}
foreach (array_filter(glob($webcam_dir . '*'), 'is_file') as $path) {
$last_filename = basename($path);
}
return $last_filename;
};
// AJAX call handler to return last webcam image filename.
function last_image() {
$subdir = $_GET['dir'];
echo get_last_filename($subdir);
wp_die();
}
add_action('wp_ajax_last_image', 'ReactWebcam\last_image');
add_action('wp_ajax_nopriv_last_image', 'ReactWebcam\last_image');
add_shortcode('reactwebcam', 'ReactWebcam\init');
?>
zde posílám slíbené php a jdu to zkusit upravit dle tvého návodu
ahoj. Tak zkoušel jsem ale asi jsem špatně pochopil zadání. Ten řádek:
//$upload_dir = funkce_wp() // das to do komentu a napises si tam svoje
ta funkce je příkaz nebo tam mám dát funkci "upload"? Trošku se nechytám promin. Když jsem změnil tedy cíl na '/webcam/' tak mi to nefungovalo a shodilo wordpress...
$upload_dir = '/webcam/'(); tedy vypadal "můj kod" Jen do mě vyžeru si kritiku
ale musím to dokončit a snad i úspěšně
Napadla mě ještě možnost, nastavit v tom pluginu cílovou složku tmp... to by mohlo také fungovat že?
Ach jo ty, ach jo, ten kod Radka. To byl jen priklad. Ale z kodu vidim, ze ten manik ma rad veci komplikovane, duplicitne, pak se to samozrejme blbe prepisuje.
Musis to analyzovat od vysledku ke zdrojum. Radek po radku se dobrat k tomu, z ceho to posklada.
<img src="' . $images_root_url . $initial_image_filename . '" />
$images_root_url?
$initial_image_filename?
$initial_image_filename = get_last_filename($atts[SUBDIR_ATTNAME]);
$atts[SUBDIR_ATTNAME] ?
$atts = shortcode_atts(array(
REFRESHINT_ATTNAME => REFRESHINT_DEFAULT,
SUBDIR_ATTNAME => NULL
), $atts);
Takze, att subdir je bud null nebo neco, co zadavas do init jako parametr. Ty tam mas pravdepodobne null. A nebo to WP nejak organizuje podle uzivatelu. WP jsem neprogramoval, takze jen si to tipuji.
get_last_filename?
Jestli to spravne chapu, tak to je funkce, ktera vybira posledni obrazek webkamery. A to jeste takovym zpusobem, ze vraci systemem nahrany posledni soubor, ani nekontroluje datum
foreach (array_filter(glob($webcam_dir . '*'), 'is_file') as $path) {
$last_filename = basename($path);
}
// cili je to cyklus, ktery projde vsechny soubory a ulozeny bude posledni
// cyklus (soubory => soubor) {last = soubor}
Jednim slovem fascinujici. Ale budiz, asi to funguje. A je to rychlejsi nez
kontrolovat datum. Mozna, ze existuje i lepsi zpusob v php nebo pres cmd. Zatim
jsem nic podobneho nepotreboval resit.
Nicmene, jeho reseni vubec nepocita s tim, ze by tam mohlo byt 0 souboru Jakoze pred tim cyklem by melo
byt:
$last_filename = "";
A dalsi vec, co s hned vsimnes, ze na 2 mistech v programu ma $upload_dir =
wp_upload_dir();
A samozrejme ten program nema obaleny ani v class. Ok, zpet k analyze... Neco se
opakuje, neco nee. Otazkou je, proc nee?
$upload_dir = wp_upload_dir(); // get_last_filename + init
$webcam_dir = $upload_dir['basedir'] . '/' . WEBCAM_DIR . '/'; // get_last_filename
$images_root_url = $upload_dir['baseurl'] . '/' . WEBCAM_DIR . '/'; // init
$upload_dir['basedir'] ?
$upload_dir['baseurl'] ?
// musel bys tam pridat nekam var_dump($upload_dir);
// ale, protoze baseurl jde do images_root_url a to jde do img-src, tak tam bude nejspis cast, napr http://.../upload/
// a basedir bude linuxova cesta k souboru, napr /upload/
const WEBCAM_DIR = 'webcam'; // !!!
Ok, takze, co z toho te zajima? Jakou chces mit cestu a jaka tam je ted?
Rekneme, ze
basedir = '/upload/';
baseurl = 'https://.../upload/'
SUBDIR_ATTNAME = null
WEBCAM_DIR = 'webcam'
'/upload/' . 'webcam/' . '' // Takze, cesta pro upload bude vypadat nejak takto:
'https://.../upload/' . 'webcam/' . '' // Cesta pro webovou stranku
Ted si tedy musis bvybrat, co tam chces mit?
WP pocita s tim, ze soubor budes ukladat do slozky
mujwordpress/upload/webcam/
Jestli to spravne chapu, tak tva webkamera funguje jinak, je pripojena jako
sitove zarizeni a je mozne z ni obrazek ziskat pomoci ftp://. Je to tak?
V tom pripad by ti stacilo udelat si kod
function init($atts) {
$path = 'ftp://user:password@host:port/path';
$data = file_get_content($path);
$type = mime_content_type($path); // tady si nejsem moc jisty, kdyztak odkomentuj dalsi radek
//$type = 'image/png';
$src = 'data:' . $type . ';base64,' . base64_encode($data);
return '<img src="'.$src.'">';
}
https://stackoverflow.com/…e64-encoding
Nebo bys mohl pouzit 2 soubory
--- x.php ---
<?php
$path = 'ftp://user:password@host:port/path';
header('Content-type:image/png');
readfile($path);
?>
-- y.html ---
<img src="x.php">
A nebo, kdyby ti nevadilo sdilet heslo ke kamere, tak by to slo i takto:
-- z.html ---
<img src="ftp://user:password@host:port/path">
Jo, jeste teda k tomu tvemu kodu. Tobe by melo stacit opravit tyto 2 radky:
//$images_root_url = $upload_dir['baseurl'] . '/' . WEBCAM_DIR . '/'; // idealne si puvodni zakomentuje
$images_root_url = '/mujwordpress/upload/webcam/';
//$webcam_dir = $upload_dir['basedir'] . '/' . WEBCAM_DIR . '/';
$webcam_dir = '/mujwordpress/upload/webcam/';
Ale nejsem si jisty, zda tam bude na zacatku '/' a zda u url nebude jeste http a nejake dalsi veci. To se da prave zjistit vypisem var_dump($upload_dir); To by melo vypsat to, co prijde na zacatek te adresy (url/file adresa slozky s wordpresem).
Ahoj. Seděl jsem nad tím par dnů ale s mou nulovou znalostí jsem pohořel a nefunguje skoro nic. Autor už na tom nedělá a nepamatuje si jak to dělal a v oboru už není... Ukrojil jsem si moc velký kus na své znalosti
Tak to zkus pomalu. Co funguje a jak to funguje?
Muzes do ww prohlizece zadat ftp adresu primo na kameru? Neco takoveho? A funguje to i u souseda nebo jen na tve siti
ftp://lojza:[email protected]:983/mojewebkamera
Pokud to funguje, muzes si vyrobit html stranku s kodem:
<img src="ftp://lojza:[email protected]:983/mojewebkamera">
Treba na plose, pak na ni kliknes a v prohlizeci by se ti mel zobrazit 1
obrazek z webky. Pokud si myslim, ze to funguje, jak to funguje.
Pokud se zobrazi, tak pak potrebujes pomoci stranky odeslat na web. Coz je
normalni upload souboru, ne? Cili, ti staci zakladni znalosti html a php.
Obrazek odesilat nemusis, pokud ta FTP adresa funguje i mimo tvou sit, cili u
souseda.
Zobrazeno 12 zpráv z 12.