IT rekvalifikace s garancí práce. Seniorní programátoři vydělávají až 160 000 Kč/měsíc a rekvalifikace je prvním krokem. Zjisti, jak na to!
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.
Avatar
Marian Vičík:26.5.2020 8:28

Dobrý den,

chtěl bych prosím pomoct/poradit. Mé zkušenosti s php jsou velice omezené (žádné) a chtěl bych dosáhnout toho, abych nahrával fotky z kamery na FTP a z něj pomocí PHP nahrával na web. Našel jsem pár pluginů na wordpress a nejlepší mi asi přišel od našeho českého autora React webcam. Velice chytrý plugin dokonce načítá i poslední fotku (nemusí mít statický název) Problém ale nastává v tom, že naše kamera (hikvision) umí nahrát jen do dvou podsložek (cílovka react je asi ve třech). Umí prosím někdo tohle zeditovat a nastavit jinou cílovou složku? Jsem začátečník tak prosím trpělivost a pevné nervy při mé nechápavosti :D

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í).

 
Odpovědět
26.5.2020 8:28
Avatar
Peter Mlich
Člen
Avatar
Peter Mlich:26.5.2020 9:59

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 '';
}
 
Nahoru Odpovědět
26.5.2020 9:59
Avatar
Peter Mlich
Člen
Avatar
Peter Mlich:26.5.2020 10:01

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.

Editováno 26.5.2020 10:02
 
Nahoru Odpovědět
26.5.2020 10:01
Avatar
Marian Vičík:26.5.2020 11:09

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.

 
Nahoru Odpovědět
26.5.2020 11:09
Avatar
Peter Mlich
Člen
Avatar
Peter Mlich:26.5.2020 13:58

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.

 
Nahoru Odpovědět
26.5.2020 13:58
Avatar
Marian Vičík:26.5.2020 14:13
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 :)

 
Nahoru Odpovědět
26.5.2020 14:13
Avatar
Marian Vičík:27.5.2020 8:05

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" :D Jen do mě vyžeru si kritiku ale musím to dokončit a snad i úspěšně :)

Editováno 27.5.2020 8:07
 
Nahoru Odpovědět
27.5.2020 8:05
Avatar
Marian Vičík:27.5.2020 8:40

Napadla mě ještě možnost, nastavit v tom pluginu cílovou složku tmp... to by mohlo také fungovat že?

 
Nahoru Odpovědět
27.5.2020 8:40
Avatar
Peter Mlich
Člen
Avatar
Peter Mlich:27.5.2020 9:10

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/u­pload/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">
 
Nahoru Odpovědět
27.5.2020 9:10
Avatar
Peter Mlich
Člen
Avatar
Peter Mlich:27.5.2020 9:20

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($uplo­ad_dir); To by melo vypsat to, co prijde na zacatek te adresy (url/file adresa slozky s wordpresem).

 
Nahoru Odpovědět
27.5.2020 9:20
Avatar
Marian Vičík:1.6.2020 7:48

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

 
Nahoru Odpovědět
1.6.2020 7:48
Avatar
Peter Mlich
Člen
Avatar
Peter Mlich:1.6.2020 10:06

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.

 
Nahoru Odpovědět
1.6.2020 10:06
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 12 zpráv z 12.