1--TEST-- 2mysql_[p]connect() - max_links/max_persistent 3--SKIPIF-- 4<?php 5require_once('skipif.inc'); 6require_once('skipifconnectfailure.inc'); 7require_once('table.inc'); 8 9mysql_query('DROP USER pcontest', $link); 10if (!mysql_query('CREATE USER pcontest IDENTIFIED BY "pcontest"', $link)) { 11 printf("skip Cannot create second DB user [%d] %s", mysql_errno($link), mysql_error($link)); 12 mysql_close($link); 13 die(); 14} 15 16// we might be able to specify the host using CURRENT_USER(), but... 17if (!mysql_query(sprintf("GRANT SELECT ON TABLE %s.test TO pcontest@'%%'", $db), $link)) { 18 printf("skip Cannot GRANT SELECT to second DB user [%d] %s", mysql_errno($link), mysql_error($link)); 19 mysql_query('REVOKE ALL PRIVILEGES, GRANT OPTION FROM pcontest', $link); 20 mysql_query('DROP USER pcontest', $link); 21 mysql_close($link); 22 die(); 23} 24mysql_close($link); 25?> 26--INI-- 27mysql.max_links=2 28mysql.allow_persistent=1 29mysql.max_persistent=1 30--FILE-- 31<?php 32require_once('connect.inc'); 33 34function my_connect($offset, $host, $user, $passwd, $db, $port, $socket) { 35 if ($socket) 36 $host = sprintf("%s:%s", $host, $socket); 37 else if ($port) 38 $host = sprintf("%s:%s", $host, $port); 39 40 41 $link = mysql_pconnect($host, $user, $passwd); 42 if (!$link) { 43 printf("[%03d] Cannot connect using host '%s', user '%s', password '****', [%d] %s\n", 44 $offset, $host, $user, $passwd, 45 mysql_errno(), mysql_error()); 46 return false; 47 } 48 49 if (!mysql_select_db($db, $link)) 50 return false; 51 52 return $link; 53} 54 55$links = array(); 56 57// try to open 2 links 58$links[0] = my_connect(10, $host, $user, $passwd, $db, $port, $socket); 59$links[1] = my_connect(20, $host, 'pcontest', 'pcontest', $db, $port, $socket); 60if (false !== $links[1]) 61 printf("[030] Last connection should not have been allowed!\n"); 62 63// free some links but let index 1 remain 64unset($links[1]); 65mysql_close($links[0]); 66unset($links[0]); 67 68// should be allowed -> only open connection 69$links[0] = my_connect(40, $host, $user, $passwd, $db, $port, $socket); 70var_dump($links); 71 72mysql_query('REVOKE ALL PRIVILEGES, GRANT OPTION FROM pcontest', $links[0]); 73mysql_query('DROP USER pcontest', $links[0]); 74 75mysql_close($links[0]); 76print "done!\n"; 77?> 78--CLEAN-- 79<?php 80// connect + select_db 81require_once("connect.inc"); 82if (!$link = my_mysql_connect($host, $user, $passwd, $db, $port, $socket)) { 83 printf("[c001] Cannot connect to the server using host=%s/%s, user=%s, passwd=***, dbname=%s, port=%s, socket=%s\n", 84 $host, $myhost, $user, $db, $port, $socket); 85} 86 87@mysql_query('REVOKE ALL PRIVILEGES, GRANT OPTION FROM pcontest', $link); 88@mysql_query('DROP USER pcontest', $link); 89 90mysql_close($link); 91?> 92--EXPECTF-- 93Warning: mysql_pconnect(): Too many open persistent links (1) in %s on line %d 94[020] Cannot connect using host '%s', user '%s', password '****', [0] 0 95array(1) { 96 [0]=> 97 resource(%d) of type (mysql link persistent) 98} 99done!