#!/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 # # # Updates: # 2011-12-26: # Make sed expression more explicit. # Reported by Kartsten Schmidt # 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 "/^extension=${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