php

Batocera: aggiungere supporto a script php (via command line)

batocera

Avendo la necessità di eseguire PHP via command line (per poter eseguire degli script php) su una macchina batocera, ci si accorge che il problema è più complesso del previsto: batocera nel suo repository di pacchetti non ha la possibilità di installare PHP, e anche facendo delle ricerche non ho trovato nulla a riguardo. Illustro qui 2 soluzioni possibili al problema.

PHP: DOMDocument e UTF-8

php

Il modulo DOM di PHP contiene le funzionalità per manipolare gli oggetti dom: la classe radice è "DOMDocument", al quale può essere dato in pasto un testo in formato HTML o XML da decodificare e quindi elaborare come preferiamo.

Questa classe ha purtroppo dei noti problemi con il supporto a testi UTF-8 (e quando mai...).

Provate ad esempio questo codice, che in teoria non dovrebbe fare nulla (decodifica la stringa passata e la ricodifica senza farci nulla).

$content = '<html><body>Verrà il giorno che non ci saranno problemi di encoding</body></html>';
$document = new \DOMDocument('1.0');
$document->loadHTML($content);
$out = $document->saveHTML();

php_network_getaddresses: getaddrinfo failed: Name or service not known

php

Se apache+php da questo errore quando cerca di connettersi a un host, il problema potrebbe essere semplicemente che il servizio apache, avviato prima della connessione di rete completata, non ha aggiornati i dati da /etc/resolv.conf. Nel caso la soluzione è riavvare apache, avendo cura di fare stop e start del servizio separatamente, in sequenza, e non il semplice restart (con il restart i dati del dns non vengono riletti).

Ad esempio su arch linux:

sudo rc.d stop httpd; sudo rc.d start httpd

Può essere una buona idea mettere lo script che fa questa sequenza di commandi in auto-esecuzione quando la rete si aggancia. Vedi: Eseguire script quando la connessione wireless si attacca

PHP, Mysql e "The used command is not allowed with this MySQL version"

php
Tags: phpmysql

Problema: in uno script PHP cerchiamo di eseguire il comando mysql: "LOAD DATA LOCAL INFILE ..."

(Quindi in genere cerchiamo di importare un file csv in una tabella mysql dal file system locale).

Lo script si blocca con un errore:

The used command is not allowed with this MySQL version

Mentre se proviamo a fare lo stesso comando direttamente da una shell Mysql funziona tutto (se non è così il problema è da cercarsi nella configurazione generale mysql).

 

Il problema è dovuto al fatto che la connessione a Mysql non specifica l'abilitazione dei LOCAL_FILES.

Per abilitarla direttamente va usato il flag "128" al comando mysql_connect o mysql_pconnect.

Esempio

[php]