Internet: PHP, CGI, stb.

PHP jpg-ből webp-be hibássan konvertál

Egyik tárhely szerveren valamiért hibásan konvertálja a jpg-t webp-be. Valaki tálalakozott már hasonló hibával?

Próbáltam hasonló környezetet kialakítani másik virtuális szerveren is de nem ott nem jött elő ez a hiba.

Amit eddig megállapítottam:

  • a problémás szerveren generált webp-t a chrome rosszul jeleníti meg, viszont az FF jól
  • webp kép valószínűleg hibás, mivel a gimp sem volt képes betölteni
  • A php-gd-libwebp hármas generálja  képet, valahol itt lehet a probléma
  • A teszteket php7.x -a paranccsal csináltam, hogy ne avatkozzon bele más folyamat.
  • A probléma független attól, hogy  7.0-ás vagy 7.4-es phpt használok
  • GD verzió mindenhol 2.3

Minta kód:

user@server:~/www/dev/uploads/webp/temp$ php7.0 -a
Interactive mode enabled

php > $img = imagecreatefromjpeg('test.jpg');
php > imagewebp($img,'test.webp',80)

 

Teszt környezetek:

Problémás szerver

ubuntu 16.04.7 LTS,
php 7.0.33-37+ubuntu16.04.1+deb.sury.org+1
php 7.4.12-3+ubuntu16.04.1+deb.sury.org+1
libwebp6 0.6.0-4+ubuntu16.04.1+deb.sury.org+1

 

saját környezet, jól generálta le a képet

Ubuntu 18.04.4 LTS,
php Version: 7.0.33-37+ubuntu18.04.1+deb.sury.org+1,
php 7.4.12-3+ubuntu18.04.1+deb.sury.org+1
libwebp6 0.6.1-2

 

Hasonló környezet, jól generálta le a képet

ubuntu 16.04.7 LTS,
php 7.0.33-37+ubuntu16.04.1+deb.sury.org+1
php 7.4.12-3+ubuntu16.04.1+deb.sury.org+1
libwebp6 0.6.0-4+ubuntu16.04.1+deb.sury.org+1

Minta fájlok

https://drive.google.com/file/d/1hj4XbZQYkKkc4PjHFI5tQ_0mhx3H_jqq/view?usp=sharing

Regex két string között minden X karakter cseréje Y-ra preg_replace-szel

Egy adott mintában szeretném az összes @ karaktert : karakterre cserélni, de kizárólag azokon a részeken, amit %% és !% stringek határolnak. Szemléltetem:

           __      _   _    __           __       _    _    __             
zj@fcavaszt%%rfcazr@tcc@cccc!%ccbfw@fcujw%%efcubzj@agew@ujca!%gewfcc@ccccaw
zj@fcavaszt%%rfcazr:tcc:cccc!%ccbfw@fcujw%%efcubzj:agew:ujca!%gewfcc@ccccaw
           ^^      ^   ^    ^^           ^^       ^    ^    ^^             

Végigtúrtam a netet, próbálkoztam saját kútfőből is, de nem jöttem rá a megoldásra. Valaki tudja esetleg?

Firefox market share < beka ?

Minap felvetettem a lenovo ufsz-nek, hogy miert nem mukodik a checkoutjuk firefox alol. A valaszban hivatkoztak a https://en.wikipedia.org/wiki/Usage_share_of_web_browsers -ra, ami szerint a firefox reszesedese a beka alfara kozeleben van, es nem prioritas nekik, hogy mukodjon.

A grafikonon jol latszik, hogy 2018-tol *masszivan* leesett a firefox nepszerusege, mi tortent itt? Errol total lemaradtam.

[megoldva] Bash "source"-nak megfelelő környezet-követő Python futtatás interaktív parancssorból

Egy ahhoz hasonló környezetre vágyom, mint ami a Google Colab-ban is van, Python3-ra – vagy ahogy a bash is intézi a source-olást (. script).

Leginkább az kellene, hogy amikor lefuttatok két szkriptet, az elsőnek a változóit, eredményeit ne felejtse el a parancssor, amikor indítom a másikat. ( https://realpython.com/run-python-scripts/ – ebben utánanéztem, hogy az "import" effélét csinál, de mégis, mikor lefuttattam (importtal) az első részt, és indítottam volna a másodikat, NameError: name 'valami' is not defined jött. Tehát elfelejtett mindent, amit az első futamban csinált.

Ennek az egésznek az a motivációja, hogy az első rész sokáig fut, a másodikat viszont többször szükséges lehet újraindítani (és ez utóbbi nem fut sokáig, de támaszkodik az első eredményeire).

PHP-ban írt static html generátor

Sziasztok

Olyan PHP-ban írt static html generátort keresek, amihez nem kell parancssor. Sem a telepítéshez, sem a későbbi használathoz.

Az ideális elvárásom az lenne, hogy egy pl. /admin mappában ott van ez a PHP-ban írt megoldást és ebben összekattingat a user egy oldalt...a környezet korlátaival számolva és az eredmény statikus html formájában egy publikus mappában landol. Köztes rétegnek használhat MySQL-t, de az éles adatok már csak statikus html-ek legyenek.

Sok megoldást néztem, de a legtöbbnek parancssoros telepítés, meg a teljes szervert akarja és majd ő fut a 8080-as porton, hát azt nem oké. Shared hostingon landolnának ezek a tartalmak.

Neves CMS-ek cache pluginja nem váltja ki a feladatot, mert attól még egy feleslegesen böszme nagy dinamikus rendszerek, persze tempóban javit valamit. Más felől azok a cache megoldások nem hozzák szerintem egy rendes link alapú static html tempóját. Illetve belefutottam már olyanba, hogy 2GB-s Joomla weboldal cache mappája 15GB lett. Na köszi :)

Szóval olyan kell, amit odaadok a laikus ügyfélnek, aki már látott Joomla, Wordpress, Drupal-t és összekattingat magának valami egyszerű, pofás kis oldalt, néha frissít egy cikket és ebből neki egy biztonságos kimenet lesz. Ez az egész pedig elfut bármelyik shared hosting szolgáltatónál. Nem akar localhoston generálni és FTP-vel feltölteni, mert akkor wordben is megcsinálhatná és feltölthetné a weboldalát, mint a hőskorban :)

Ha ismertek ilyet, kérlek írjátok meg.

Köszönöm!

Tengerszint feletti magasság GPS koordinátákból

Van egy GPS eszköz és a tőle gyűjtött adatok. Elvileg mérné az eszköz a tengerszint feletti magasságot is, de az akkor is ugrál (több 10-100m), ha az eszköz egy helyben van már jó ideje, a koordináták viszont rendben vannak. Google Maps-ból vagy hasonló szolgáltatásból hogy lehetne kinyerni legegyszerűbben egy programmal (jav: amit én írok), hogy adott koordinátákhoz milyen tengerszint feletti magasság tartozik? Mivel az eszköz nem repül és nem megy fel az emeletre :) ezért adott domborzati pont tengerszint feletti magassága elég pontos lenne.

Böngésző kliens oldali adattárolás és a kvótája

A kérdésem az, hogy csinált-e valaki már olyat, hogy nagyobb mennyiségű adatot tárolt volna weboldalon klines-oldalon? Úgy, hogy megemelte volna valamilyen módon a tárolási kvótáját?

Ilyet szeretnék csinálni - néhány száz megabájtot tárolni a böngészőoldalhoz kötve. Kliens oldali appként megvalósítva, ServiceWorker-rel kombilálva olyan weboldal készülne, ami akkor elér egy "adatbázist", ha a szerver nem elérhető és használható marad. Úgy tűnik, hogy az egyetlen hiányzó láncszem az, hogy meg tudjam emelni az oldal tárolási kvótáját.

A tároláshoz az indexedDB API tűnik egy jó kompromisszumnak, viszont ahogy próbáltam pártíz MB után nem hajlandó több adatot tárolni, és hibát dob a tárolási műveletekre, de úgy, hogy nem is ír okot. (Firefox alatt)

Létezik elvileg egy storageQuota API, amit viszont a Firefox nem valósított meg, és a dokumentációja szerint ez máris deprecated. https://developer.mozilla.org/en-US/docs/Web/API/StorageQuota - Deprecated. Not for use in new websites. De sehol nem találtam meg, hogy van-e valami helyette? Chromium-ban néztem, az sem valósítja meg ezt az API-t. Chrome elvileg igen, de azt még nem próbáltam. (Chrome-ot nem szívesen telepítek a fejlesztős gépemre, de ki fogom próbálni egy másikon.)

Létezik elvileg egy FileSystem API is, aminek a segítségével lehet adatokat tárolni, de sajnos ezt sem ismeri a Firefox. A Chromium sem ismeri a FileSystem API-t, a próbálkozásaim alapján.

A kibővített kérdésem az, hogy létezik-e olyan megoldás, ami cross-browser és alkalmas arra, hogy az eszköz tárolókapacitásáig adatokat (képek, szöveg, stb) tároljunk a usertől engedélyt kérve?

Ha nincs cross-browser megoldás, akkor van-e olyan, ami Androidon (telefon és tablet) és legalább egy PC-s böngészőn működik? Tehát némi korlátozással, de tudnék belőle olyan terméket csinálni, ami működik a userek gépein?

[megoldva] Tömbszorzás

Ami pythonban egyszerű szorzással megy, az php-ban némileg körülményes, mert itt nincs lehetőség pl. [3,4,5] * 2.4 használatára.
Ehelyett egy gyalogos (és nem elegáns) megoldás:

function m ($a,$c) {
    $r=[];
    foreach($a as $b){ $r[] = $b * $c; }
    return $r;
}
print_r(m([1,4,5], 4.2));

    [0] => 4.2
    [1] => 16.8
    [2] => 21

Ehelyett itt: https://riptutorial.com/php/example/26837/comparison-between-bcmath-and-float-arithmetic-operations javasolnak pár array_map-es megoldást, de olyat nem találtam, ahol meg lehet adni paraméterként is a szorzót.

A gond valahogy a láthatósággal van; ehelyett szeretnék egy működő (kétparaméteres) array_map megoldást, ami lehetőleg nem teszi be másik tömbként (többszörözve) a szorzót:

$input = [2,3,4];
$c = 3;
print_r( array_map(function($el) { return $el * $c; }, $input) );

   Undefined variable: c

Drupal weboldalak mentésének visszaállítása dedikált gépen

Sziasztok,

Adott kb. 70 darab drupal cms-sel készült weboldal ( vegyesen 7.72, 8.9.1, 9.0.1). Ezekről vannak biztonsági mentések, és időnként tesztelni akarom a mentések visszaállítását egy erre dedikált lokális gépen.  Azaz egy gépre kerülne az összes website és ott lehetne tesztelni, hogy sikerült-e a visszaállítás, működik-e minden,stb...  Jelenleg úgy néz ki, hogy manuálisan történik az adatbázisoknak, adatoknak a lemásolása a dedikált gépre. (Elkezdtem scriptet írni, de létezik-e más megoldás esetleg?) Mit javasoltok a folyamat felgyorsítására? Célszerű-e docker-es környezet kialakítása? (verziók miatti különbségek, weboldalak->konténerek). 

Előre is köszi.

Javascript Exception, Warning loggolása szerverre

Azt szeretném megoldani, hogy az összes kliens oldali logot a szerverre át szeretném küldeni például XHR küldésekkel. (Nyilván ha éppen az a baj, hogy nincs hálózat, akkor nem fog átmenni.)

Az értelme az volna, hogy ha esetleg nem működik valami, akkor lehetőleg ne kelljen a felhasználóhoz rohangálni: a szerveren ott lesznek a logok.

Megtaláltam, hogy a console objektumon keresztüli üzeneteket át lehet írányítani ilyenekkel:

  const info = console.info.bind(console)
  console.info = (...args) => {
    info('My Console!!!')
    info(...args)
  }

Megtaláltam azt is, hogy globális kezeletlen exception handlert is fel lehet venni:

window.addEventListener('error', function (evt) {
    console.log("Caught[via 'error' event]:  '" + evt.message + "' from " + evt.filename + ":" + evt.lineno);
    console.log(evt); // has srcElement / target / etc
//    evt.preventDefault();
});

A kérdésem az, hogy van-e más ilyen forrás, amit lehet/érdemes loggolni. Illetve van-e erre valami teszt lehetőség kipróbálgatni? Ami leginkább érdekelne, hogy régebben láttam warningokat is a web developer logban, amiket a HTML engine adott ki magából - persze most nem jut eszembe, hogy mire jött. Ezek a console.warn() híváson keresztül mennek, vagy más úton kerülnek a logba? Ha más úton, akkor hogyan lehetne elkapni? Hogy lehetne ilyen példaoldalt csinálni, amit ki tudom próbálni, hogy a log szerverre irányítás minden esetre jól működik-e?

Esetleg ki használ ilyen kész libet, amit csak be kell emelni?