dimarts, 14 d’abril del 2009

Problemes amb PHP5 i les extensions dinàmiques

Amb la nova versió del php, la 5.2.5, hi ha hagut un canvi en la forma de carregar els fitxers dinàmics tipus dll o so.
En la nova versió cal que els fitxers estiguin en el directori per defecte definit en la directiva extension_dir del php.ini (/etc/php5/apache2/php.ini)
En el meu cas, el problema el vaig trobar al intentar carregar la llibreria phpchartdir520.dll del ChartDirector. Al executar la pàgina web que la requeria, apareixia un missatge d'error tipus:
dl(): Temporary module name should contain only filename
Aquest missatge apareix quant s'intenta carregar dinàmicament una llibreria que no es troba en el directori per defecte abans indicat. Segurament abans d'aquest missatge ens haurà donat un altre missatge similar indicant que ha intentat carregar la llibreria des del directori per defecte.

La solució es basa en copiar els fitxers necessaris (la llibreria requerida) al directori per defecte indicat a la directiva extension_dir.
Per al cas concret del ChartDirector, ha calgut copiar els següents arxius:
  • phpchartdir520.dll
  • libchartdir.so
  • chartdir.lic
  • fonts/
Part d'aquesta informació prové de http://www.chartdir.com/forum/download_thread.php?site=chartdir&bn=chartdir_support&thread=1195722832

dimarts, 23 de desembre del 2008

Reinstal·lar un paquet Debian

Si hem desinstal·lat un paquet Debian (a Ubuntu hem fet apt-get remove "paquet") i, al instal·lar-lo de nou ens dona errors, podem intentar fer el següent:

Per exemple, si fos la paquet postfix:

apt-get install --reinstall postfix

dimarts, 16 de desembre del 2008

Serveis escoltant peticions de xarxa

Per conèixer els serveis que tenim escoltant peticions de xarxa podem executar:

netstat -tap

Si volem buscar algun servei en concret poden executar, per exemple:

netstat -tap | grep pop3

divendres, 5 de setembre del 2008

PHP5: session_start() i session_write_close()

Al posar en funcionament un servidor LAMP, ens serà prou fàcil i trobarem molta informació sobre multitasking, tant a l'Apache com al MySQL com per al PHP.

Jo em vaig trobar amb un cas curiós. Tot i haver configurat tot assegurant les capacitats de multitasca, al treballar desde un mateix client web i amb una mateixa sessió el multitasquing no funcionava. Fins que no es carregava una pàgina no s'iniciava la càrrega de la següent.

Després de molt buscar vaig trovar (al manual oficial del PHP, que ja te gràcia la cosa) que al iniciar un script php i cridar la funció session_start() el php bloqueja la crida de aquesta funció des de altres scripts per a la mateixa sessió. El motiu es prou raonable, doncs els valors de la sessió son per passar-los d'un script a l'altre, i si en un script els estem modificant podriem generar inconsistències als altres scripts.

Per sort, vaig descobrir que la funció session_write_close() bloqueja les variables de la sessió per a escriptura, però permet treballar amb tota normalitat amb la seva funcionalitat. Així doncs, per a cada script cal començar amb la funció session_start() i, en el moment en que el script ja no tingui que actualitzar l'array $_SESSION, ja podem executar la funció session_write_close(), fet que permetrà desbloquejar la execució d'altres scripts que estiguin aturats en el semàfor per a la funció session_start().

Evidentment, aquest problema de paralelisme es dona per a una mateixa sessió (un mateix client). Ja veurem si més endavant, en futures versions de PHP es permeten múltiples sessions per a un mateix client.

dimarts, 26 d’agost del 2008

Problemes apache2 Ubuntu 8 Hardy

Explico la solució del següent problema al instal·lar un servidor LAMP amb Ubuntu 8 Hardy:
- Al enllaçar a scripts php amb FireFox, no els executa sino que et demana amb quina aplicació els vols obrir, o be si els vols guardar.

Després de molt investigar i de vàries reinstal·lacions, la solució que m'ha funcionat es la següent:
- Al arxiu /etc/apache2/sites-enables/000-default, li faltaven indicar el ServerName i el DirectoryIndex.

El fitxer queda de la següent forma (en negreta les modificacions):
NameVirtualHost *
<Virtualhost *>
ServerAdmin webmaster@localhost
ServerName pochtatil
DocumentRoot /var/www/
DirectoryIndex index.php
<Directory />
Options FollowSymLinks
AllowOverride None
</Directory>
...

Finalment només cal reiniciar l'apache:
sudo /etc/init.d/apache2 stop
sudo /etc/init.d/apache2 start

Canviar etiqueta unitat USB

Tot això s'ha fet sota Ubuntu 8.04, amb escriptori Gnome.

Per canviar el nom que es veu a l'escriptori, cal canviar-ho des de un sistema Windows (quan descobreixi com fer-ho amb Linux, ja ho publicaré).

Per a muntar el dispositiu USB en un altre lloc, cal canviar el punt de muntatge amb el menú propietats que apareix clicant el botó dret sobre la incona del escriptori. El punt de muntatge cal que sigui un nom, sense caràcters estranys, i que el sistema penjarà del directori /media. Cal que aquest punt de muntatge no existeixi. Al desmuntar i tornar a muntar el dispositiu, ja funcionarà.

Si ens hem equivocat en aquest últim punt, i els sistema ens dona un error dient que no pot muntar el dispositiu doncs conté caràcters incorrectes al path de muntatge, ho podem arreglar amb el programa gconf-editor, modificant a la clau /system/storage/volumes el uuid que correspongui.

dijous, 21 d’agost del 2008

digikam a Gnome (problemes metadata)

digikam es un gestor fotogràfic molt complet, desenvolupat per a KDE. El podem fer funcionar a Gnome sense problemes (amb instal·ladors tipus Synaptic).

Si experimentem problemes amb la informació metadata de les imatges, es que ens falta instal·lar el paquet kdegraphics-kfile-plugins (amb el mateix Synaptic)

Font: http://www.digikam.org/drupal/node/166

Afegit el 14/04/2009: A partir de la versió 8.10 de Ubuntu sembla ser que això no funciona.