search
top

Réorganiser la liste des extensions PHP

Il m’est arrivé que php segfault (plante) sans raison apparente et sans logger aucune information, le script ci-dessous réorganise l’ordre dans lequel les modules sont chargé.

#!/bin/sh

# =============================================================
# Fix php/extensions.ini order
#
# Script based on the idea and information(s) of
# - http://www.pingle.org/2007/09/22/php-crashes-extensions-workaround
# - http://nerdstock.org/php_extensions
#
# Please copy your original php/extensions.ini to a save place before
# running this script!
#
# There is no guaranty the script is working for you or don't damage
# your system. Use at own Risk!
#
# 2011-04-03 olli hauer
#
# License: BSD
#  http://www.freebsd.org/copyright/freebsd-license.html

INI=/usr/local/etc/php/extensions.ini

EXT="session.so fileinfo.so crack.so ssh2.so imagick.so ldap.so
    simplexml.so dba.so ctype.so apc.so ftp.so mbstring.so tokenizer.so
    filter.so pgsql.so gmp.so mcrypt.so tidy.so xmlwriter.so mhash.so gd.so
    ncurses.so readline.so gettext.so iconv.so dbase.so calendar.so exif.so
    zlib.so curl.so mailparse.so xmlrpc.so bz2.so sysvmsg.so pdf.so openssl.so
    ming.so dom.so hash.so xmlreader.so gnupg.so bcmath.so pcre.so xsl.so
    wddx.so memcache.so soap.so spl.so sqlite.so recode.so pdo.so pdo_mysql.so
    pdo_sqlite.so mysqli.so mysql.so imap.so sockets.so pspell.so xml.so"

if [ ! -e ${INI} ] ; then
    echo "cannot find ${INI}"
    exit 1
fi

# cleanup previous run
[ -e ${INI}.new ] && rm -f ${INI}.new
cp -f ${INI} ${INI}.work

for e in ${EXT}; do
    if egrep -q "^extension=${e}" ${INI}.work ; then
        echo extension=${e} >> ${INI}.new
        sed -i '' -e "/${e}/d" ${INI}.work
    fi
done

if [ -s ${INI}.work ]; then
    echo "; additional extension(s) not known by $(basename $0)" >> ${INI}.new
    # sybase_ct needs to be loaded last.
    grep ^extension ${INI}.work | grep -v sybase_ct.so >> ${INI}.new
    grep ^extension=sybase_ct.so ${INI}.work >> ${INI}.new
    AE=1
fi
[ -e ${INI}.work ] && rm -f ${INI}.work
if cmp -s ${INI} ${INI}.new ; then
    echo "No changes found, remove ${INI}.new"
    rm -f ${INI}.new
    AE=0
fi

if [ ${AE} -ne 0 ]; then
cat << _EOF
==============================
New INI is saved as ${INI}.new

Additional extension(s) not known by $(basename $0)
are added to the end of new INI file.

Please review the new INI, and replace it on your own!
    Do some Basic tests:
    php -V
    php -m
    php -i
    apachectl graceful
    ...

_EOF
fi

cat << _EOF
If the segfault issue is not gone, or you cannot find the issue
    - ask on the ports@ mailing list
or
    - open a PR:
    Synopsys: lang/php5 Segmentation fault.
    Additional try debugging with command:
    gdb php ./php.core

http://www.freebsd.org/doc/en_US.ISO8859-1/books/developers-handbook/debugging.html

_EOF

Pourquoi ne pas migrer vers PHP 5.4 ?

Jusqu’à maintenant, j’ai donné des raisons expliquant pourquoi il est pertinent de migrer aujourd’hui vers PHP 5.4.

Aujourd’hui, suite à une discussion sur twitter avec Jean-Marc Fontaine, j’aborde ce thème sous un angle radicalement différent, puisque je vais vous dire pourquoi il n’est peut être pas pertinent de mettre en œuvre immédiatement PHP 5.4 dans le cadre d’un environnement de production.

[source : lire la suite]

Configurer php dans un alias

Dans le cas ou vous devez faire un alias, pour que l’exécution de php fonctionne, vous devez modifié le documentroot au niveau des paramètres fastcgi

Exemple :

root /var/www/somesite;

location /pma/ {
    alias /usr/share/phpmyadmin/;
}

location ~ ^/pma/(.+\.php)$ {
    alias /usr/share/phpmyadmin/$1;
    include        fastcgi_params;
    fastcgi_pass   php;
    fastcgi_param  DOCUMENT_ROOT      /usr/share/phpmyadmin;
}

Compiler Apache2 et PHP5

Paquet dev installé pour satisfaire les dépendances :

libstdc++-devel
zlib-devel
e2fsprogs-devel
libpng-devel
cyrus-sasl
db4-devel
httpd-devel
glibc-devel
keyutils-libs
libselinux-devel
libidn-devel
libxml2-devel
ncurses-devel
krb5-devel
openssl-devel
curl-devel
apr-devel
apr-util
libsepol-devel
freetype-devel
libjpeg-devel
openldap-devel
expat-devel

Compiler et installer Apache

./configure –prefix=/usr/local/httpd \
–enable-so \
–enable-suexec \
–enable-rewrite=static \
–enable-proxy=static \
–enable-ssl=static \
–enable-headers=static \
–enable-deflate=static \
–enable-status=static && make && make install

Compiler et installer PHP

./configure –with-apxs2=/usr/local/httpd/bin/apxs \
–disable-short-tags \
–enable-mysql \
–enable-memory-limit \
–enable-calendar \
–enable-magic-quotes \
–with-openssl \
–with-libxml-dir \
–with-xmlrpc \
–with-zlib \
–enable-calendar \
–with-curl \
–enable-ftp \
–with-gd \
–with-jpeg-dir \
–with-png-dir \
–with-freetype-dir \
–with-iconv \
–with-gettext \
–with-ldap \
–enable-mbstring \
–enable-zip \
–with-pear \
–enable-bcmath \
–enable-sigchild \
–enable-gd-native-ttf \
–enable-pcntl && make && sudo make install

Modifier des parametres php dans un .htaccess

Dans votre fichier .htaccess

<FilesMatch script.php>
php_value max_execution_time « 600″
php_value upload_max_filesize « 100M »
</FilesMatch>

  • max_execution_time : Pour modifier le temps d’exécution maximum.
  • upload_max_filesize : Pour modifier la taille maximum.

« Articles précédents

top