Es mostren els missatges amb l'etiqueta de comentaris php5. Mostrar tots els missatges
Es mostren els missatges amb l'etiqueta de comentaris php5. Mostrar tots els missatges

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

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