Programare

Daaaa, limbajul unde nu stii niciodata daca "+" face adunare sau concatenare.
Si inca in combinatie cu Node...
Tii minte ca io sunt ala care si-a facut numarator de celule fara sa import nimic altceva decat adresele registrilor, da?
 
Cica PDO cu sqlite n-are acelasi bug. Nu-i nimic, am dat peste altul:
Code:
<?php
$DB=new PDO('sqlite:test.sqlite');
$DB->exec('CREATE TABLE test (ID INTEGER NOT NULL PRIMARY KEY, OtherID INTEGER NULL UNIQUE);'); // A se observa "UNIQUE" de aici.
$DB->exec('BEGIN;');
var_dump($DB->errorInfo());?><br><?php
$STATEMENT=$DB->prepare('INSERT INTO test (OtherID) VALUES (?) RETURNING ID,OtherID');
var_dump($DB->errorInfo());?><br><?php
$data=array(1234);
$STATEMENT->bindParam(1,$data[0]);
var_dump($DB->errorInfo());?><br><?php
$RESULT=$STATEMENT->execute();
var_dump($DB->errorInfo(),$RESULT);?><br><?php
$ROW=$STATEMENT->fetchAll(PDO::FETCH_ASSOC);
var_dump($DB->errorInfo(),$ROW);?><br><?php
$DB->exec('COMMIT;');
var_dump($DB->errorInfo());?><br><?php
?>
Prima rulare:
Code:
array(3) {  [0]=>  string(5) "00000"  [1]=>  NULL  [2]=>  NULL }
array(3) {  [0]=>  string(5) "00000"  [1]=>  NULL  [2]=>  NULL }
array(3) {  [0]=>  string(5) "00000"  [1]=>  NULL  [2]=>  NULL }
array(3) {  [0]=>  string(5) "00000"  [1]=>  NULL  [2]=>  NULL } bool(true)
array(3) {  [0]=>  string(5) "00000"  [1]=>  NULL  [2]=>  NULL } array(1) {  [0]=>  array(2) {    ["ID"]=>    string(1) "1"    ["OtherID"]=>    string(4) "1234"  } }
array(3) {  [0]=>  string(5) "00000"  [1]=>  NULL  [2]=>  NULL }
A doua rulare:
Code:
array(3) {  [0]=>  string(5) "00000"  [1]=>  NULL  [2]=>  NULL }
array(3) {  [0]=>  string(5) "00000"  [1]=>  NULL  [2]=>  NULL }
array(3) {  [0]=>  string(5) "00000"  [1]=>  NULL  [2]=>  NULL }
array(3) {  [0]=>  string(5) "00000"  [1]=>  NULL  [2]=>  NULL } bool(false)
array(3) {  [0]=>  string(5) "00000"  [1]=>  NULL  [2]=>  NULL } array(0) { }
array(3) {  [0]=>  string(5) "00000"  [1]=>  NULL  [2]=>  NULL }
N-ar trebui sa vad si o eroare inainte de bool(false), ceva legat de UNIQUE?
 
Asa, si unde e eroarea? Nu-i pe ecran, nu-i in errorInfo, nu-i in log... unde e?

Ah, crap, stai ca m-am prins. Default e sa le ascunda. :facepalm:
 
Ar trebui să fie și în errorInfo, dar nu în $DB->errorInfo() ci în $STATEMENT->errorInfo() și restul.
 
Nu mai fac alt topic doar pentru asta. Ciudatenie maxima in PHP: am o mica aplicatie in PHP sub IIS in Windows 2022 (face la fel si pe Win 10 sau 2019) care are cateva pagini simple, pagina de start afiseaza linkuri catre celelalte iar restul, cu o exceptie, afiseaza cate un tabel cu cateva linii (sau zeci de linii) si cateva coloane. Una din pagini are tabelul si un buton care face un apel AJAX la server si acolo executa niste chestii in SQL care dureaza peste 30 de secunde.

Dubiosenia e ca daca pagina cu AJAX-ul initiaza executia aia, celelalte pagini nu se mai incarca deloc si dau timeout dupa 30 de secunde. Linia care da eroarea e un require care incarca headerul comun al paginilor, fisier separat cu cateva linii de HTML. Nu are nici o logica ca scriptul server-side care ruleaza cateva minute sa blocheze un require care incarca un fisier chior ce nu are nici o legatura cu restul. Inaintea acelui require e doar un session_start, dupa el sunt diverse alte chestii care difera de la o pagina la alta, dar toate paginile au acelasi comportament. Cand executia e terminata, totul revine la normal. Pagina de start nici macar nu se conecteaza vreodata la SQL, e doar HTML, cu require pentru header.

Si a doua chestie de care abia am dat aseara: am mutat aplicatia de pe un server 2019 pe un 2022 ca sa vad cum merge IIS cu HTTP/2 si TLS 1.3. Desi php.ini are CGI impersonate = 1 si pe ambele recunoaste user name, executia scriptului apelat prin AJAX pe 2019 e facuta pe contul utilizatorului, pe 2022 e pe contul sistem. Chiar am verificat toate setarile, PHP si web.config chiar sunt copiate de pe un computer pe altul. PHP 8.1 de luna asta.
 
La prima e posibil să fii limitat de undeva de numărul de procese/threads paralele care rulează php. Pentru că sunt dubioșenii ca asta sau ca asta (mai ales chestia cu session start) care fac php-ul single threaded. Posibil să nu fi observat până acum pentru că restul paginilor se randează repede...

Cu impersonation au mai fost și bug-uri/setări noi necesare în OS users cu versiuni noi de IIS/Windows, poate să fie de la aia.
 
Da, fix asta pare sa fie. Dupa ce ii dau de cap cu impersonarea o sa testez ceva workaround pentru prima problema: renunt la sesiune complet, o foloseam doar pentru a tine o variabila in ea care e banal de calculat la deschiderea fiecarei pagini.
 
Last edited:
In ASH de la busybox, cu orice alte utilitare mai contine busybox-ul:

Cum fac sa rulez "unrar t" (test de extractie) pe toate .rar-urile dintr-un director si sub-directoare, dar excluzand *.part2.rar *.part3.rar ... etc. ?
Am incercat un "find -exec ..." dar nu stiu cum sa exclud volumele arhivelor multi-volum.
 
Da, merge, dar am dat peste alta problema:
Am redirectat output-ul intr-un .txt ca sa il pot examina (ca nu stau ore cu ochii in ecran sa prind din zbor eventualele erori). Dar cand am ajuns la .zip-uri, am constatat ca unzip -t nu listeaza numele fisierului testat iar erorile le scoate pe stderr. Cum fac sa printez numele fisierului din find (adica find -print) si apoi stderr de la unzip, cu output intr-un fisier?

PS: Btw, am si niste fisiere cu ` (backtick) si ' (apostrof) in nume care au facut varza un xargs pe care l-am incercat.
 
Redirect la ce, ca numele fisierului vine de la find si eroarea vine de la unzip. Trebuie sa le combin cumva ca sa aflu in ce fisier a aparut eroarea.
 
Păi redirectezi output-ul unzip către stdout și pe urmă stdout-ul complet din find către fișier. Sau înlănțui în exec si print-ul de nume, ceva gen

Code:
-exec bash -c "basename  {} >> out.txt && unzip -t {} >> out.txt 2>&1"

Posibil să mai fie nevoie de niște escapes și ghilimele pe la {}, cam așa \"{}\", n-am testat
 
Back
Top