This one is a very strange problem!
I created a little PHP script which connects to a MySQL database. Nothing amazing, except that I needed to run it via command line using the php
command. What happened is that the script ran perfectly fine but, for some reason, it returned “Segmentation fault” when it reached the end of the file! 😯
It reminds me of the old days when I worked on C language, I used to see this not-very-useful message quite often. 😉
Anyway, why do we get a “Segmentation fault” at the end of a PHP script? And when I say ‘the end’, I mean after any other lines!
Looking around the web, I found the following bug report: http://bugs.php.net/bug.php?id=43823
This user seems to have the same problem than me except he is using a PostgreSQL database instead of a MySQL database.
Reading through the page, it looks like the problem comes from the order in which PHP loads his extensions! They explain that PostgreSQL should be loaded before cURL. If I apply the same logic, MySQL should then be loaded before cURL too.
To do that, we need to comment out the line extension=curl.so
from the file /etc/php5/cli/conf.d/curl.ini
:
# configuration for php CURL module #extension=curl.so
And add it to the file /etc/php5/cli/conf.d/mysql.ini
AFTER the line extension=mysql.so
:
# configuration for php MySQL module extension=mysql.so extension=curl.so
To be honest, I don’t really like this solution as it is a bit messy. I would prefer PHP developers to fix the root cause or at least have a way to change the order in which PHP loads the extensions.
NB: I was executing this PHP script on a Debian GNU/Linux 5.0 with Apache 2.2.9 and PHP 5.2.6.
#1 by Pat on 01 Nov 2012 - 20:40
Thanks for posting this – it fixed my problem as well and saved me pulling more hair (and I don’t have much to start with). Cheers.