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

Reply via email to