Hello, I would like to thank Richard and Pavel for their answers. The problem did not come from a permission of mysql.sock or because of a name resolution (I had /var/www/etc/hosts)
The php script could not load mysql.so I have passed the argument -c /etc/php.ini (/var/www/etc/php.ini) to make sure of the php configuration file that was used. In php.ini I changed/added those two lines extension_dir = "/lib/php/modules" extension=mysql.so And copied mysql.so in /var/www/lib/php/modules Case 1: it worked because php.ini in /etc/php/php.ini was used or maybe another one which was properly configure. Case 2: Apache loaded mysql.so properly. Case 3: didn't work for the reasons metionned above. Explained like that it looks obvious but I've spent a lot of time isolating the problem and getting it solved. And by the way, I was doing this troubleshooting to have Cacti work inside the chroot. Have a nice week end ----- Mail original ----- > De : "[email protected]" <[email protected]> > @ : Mik J <[email protected]> > Cc : "[email protected]" <[email protected]>; "[email protected]" <[email protected]> > Envoyi le : Jeudi 6 Octobre 2011 21h51 > Objet : Re: Re : Php script using adodb cannot connect to mysql when executed in chroot /var/www > > Quoting [email protected]: > >> Quoting Mik J <[email protected]>: >> >> > > De : "[email protected]" >> <[email protected]> >> > >> > > >> > OpenBSD 3.9? Or 4.9? >> > My mistake, yes it's OpenBSD 4.9 >> > >> > >> >> Have you tried connecting to 127.0.0.1 rather than localhost? >> > > I suggest this because ... > > http://openbsd.org/faq/faq10.html#httpdchroot > > <quote>Name Resolution: httpd(8) inside the chroot(2) will NOT be able to > use > the system /etc/hosts or /etc/resolv.conf. Therefore, if you have applications > which require name resolution, you will need to populate /var/www/etc/hosts > and/or /var/www/etc/resolv.conf in the chroot(2) environment. Note that some > applications expect the resolution of "localhost" to work. > </unquote> > >> (That won't be why you are getting the Fatal error: Call to undefined >> function >> mysql_pconnect(), though.) >> >> Why don't you remove ADODB from the equation? Strip it down to the >> smallest >> example of it not working, and then build up from there. >> >> Does ... >> >> <?php > mysql_pconnect('127.0.0.1','username','pwd') or > die('Cannot >> connect'); ?> >> >> ... work? >> >> > > Quoting Mik J >> > <[email protected]>: >> > > >> > >> Hello everyone, >> > >> >> > >> My problem is that I >> > cannot execute a php script in CLI. This >> > >> test script is supposed to >> > connect to mysql and retrieve some simple >> > >> results >> > >> Systeme: OpenBSD 3.9 >> > >> Packages installed: php5-core-5.2.17, >> > >> php5-extensions-5.2.17, >> > >> >> > php5-gd-5.2.17, php5-mysql-5.2.17, php5-snmp-5.2.17, >> > >> >> > mysql-server-5.1.54p3, mysql-client-5.1.54p0 >> > >> >> > >> Preparation >> > >> >> > ----------------- >> > >> mysqld is started like this >> > >> # >> > /usr/local/bin/mysqld_safe --user=_mysql >> > >> --pid-file=/var/mysql/mysql.pid & >> > >> >> > >> I have configured /etc/my.cnf in my base >> > >> system like this >> > >> >> > [mysqld] >> > >> socket = /var/www/var/run/mysql/mysql.sock >> > >> Once mysqld is >> > started I have the mysql.sock created in >> > >> /var/www/var/run/mysql >> > >> # ls >> > /var/www/var/run/mysql/ >> > >> mysql.sock >> > >> >> > >> I hard linked it to >> > /var/run/mysql/ >> > >> # >> > >> ln /var/www/var/run/mysql/mysql.sock >> > /var/run/mysql/mysql.sock >> > >> >> > >> I have >> > >> downloaded adodb5 and placed it >> > in /var/www, then adapted this code for >> > >> test >> > >> purpose >> > >> <?php >> > >> >> > include('../adodb5/adodb.inc.php'); >> > >> $conn = >> > >> >> > &ADONewConnection('mysql'); >> > >> > $conn->PConnect('localhost','cacti','cac >> > > >> > tipw','cactidb'); >> > >> $sql = 'select >> > >> hostname,description from host;'; >> > >> >> > $recordSet = &$conn->Execute($sql); >> > >> if >> > >> (!$recordSet) >> > >> print >> > $conn->ErrorMsg(); >> > >> else >> > >> while (!$recordSet->EOF) { >> > >> print >> > $recordSet->fields[0].' >> > > '.$recordSet->fields[1].'<BR>'; >> > >> >> > >> >> > $recordSet->MoveNext(); >> > >> } >> > >> $recordSet->Close(); >> > >> $conn->Close(); >> > >> >> > ?> >> > > >> > >> >> > >> >> > >> I also >> > >> copied /etc/my.cnf in /var/www/etc but changed >> > the path for the client >> > >> [client] >> > >> socket = /var/run/mysql/mysql.sock >> > >> >> > >> >> > >> The tests >> > >> ------------- >> > >> Case 1: The script is ran without any >> > chroot consideration => Works >> > >> # >> > >> /usr/local/bin/php >> > /var/www/htdocs/adotest.php >> > >> 127.0.0.1 System1<BR>1.1.1.1 >> > >> System2<BR> >> > >> >> > >> Case 2: The script is ran through the apache chrooted server >> > >> using >> > the url http://localhost/adotest.php => Works >> > >> 127.0.0.1 System1 >> > >> >> > 1.1.1.1 >> > >> System2 >> > >> >> > >> Case 3: The script is ran in command line and >> > simulates a user >> > >> running it in the chroot (/var/www) => Fails >> > >> # >> > /usr/sbin/chroot /var/www >> > >> /bin/php /htdocs/adotest.php >> > >> PHP Fatal >> > error: Call to undefined function >> > >> mysql_pconnect() in >> > /adodb5/drivers/adodb-mysql.inc.php on line 383 >> > >> Fatal >> > >> error: Call to >> > undefined function mysql_pconnect() in >> > >> /adodb5/drivers/adodb-mysql.inc.php >> > on line 383 >> > >> Note that: the adotest.php >> > >> script was able to include >> > /adodb5/drivers/adodb-mysql.inc.php >> > >> >> > >> >> > >> I thought >> > >> that maybe there >> > is something wrong with connecting to mysql >> > >> inside the >> > >> chroot so I >> > copied the mysql client inside the chroot >> > >> (/var/www) and the >> > >> >> > associated dynamic libraries. >> > >> >> > >> But everything worked when I tried to >> > connect >> > >> to the database >> > >> # /bin/mysql -u cacti -p >> > >> Enter password: >> > >> Welcome to the MySQL >> > >> monitor. Commands end with ; or \g. >> > >> Your >> > MySQL connection id is 6 >> > >> >> > >> >> > >> I've >> > >> searched for a long time and I >> > have no clue why it's working when the >> > >> script >> > >> is executed by Apache >> > and not working when executed in cli inside >> > >> chroot >> > >> /var/www. Does >> > anyone have an idea on how to solve this ? >> > >> >> > >> If you want to test >> > >> >> > just download adodb5 and place it in /var/www >> > >> >> > > >> > >> > http://sourceforge.net/projects/adodb/files/adodb-php5-only/adodb-514-for-php >> > >> 5/adodb514.zip/download >> > >> Place the php script adotest.php in >> > /var/www/htdocs >> > >> Thank you

