php.net |  support |  documentation |  report a bug |  advanced search |  search howto |  statistics |  random bug |  login
Return to Bug #60133
Patch php-mysqlforce.patch revision 2011-10-25 15:09 UTC by rendszergazdak at dotroll dot com

Patch php-mysqlforce.patch for MySQL related Bug #60133

Patch version 2011-10-25 15:09 UTC

Return to Bug #60133 | Download this patch
Patch Revisions:

Developer: rendszergazdak@dotroll.com

cat php-5.3.8.mysqlforce.patch
diff -Nru oldphp/php-5.3.8//ext/mysql/php_mysql.c php-5.3.8/ext/mysql/php_mysql.c
--- oldphp/php-5.3.8//ext/mysql/php_mysql.c     2011-08-06 16:47:44.000000000 +0200
+++ php-5.3.8/ext/mysql/php_mysql.c     2011-10-13 16:57:08.252838739 +0200
@@ -494,8 +494,10 @@
 /* {{{ PHP_INI */
 PHP_INI_BEGIN()
        STD_PHP_INI_BOOLEAN("mysql.allow_persistent",   "1",    PHP_INI_SYSTEM,         OnUpdateLong,           allow_persistent,       zend_mysql_globals, mysql_globals)
+       STD_PHP_INI_BOOLEAN("mysql.force_tcp",          "0",    PHP_INI_ALL,            OnUpdateLong,           force_tcp,              zend_mysql_globals, mysql_globals)
        STD_PHP_INI_ENTRY_EX("mysql.max_persistent",    "-1",   PHP_INI_SYSTEM,         OnUpdateLong,           max_persistent,         zend_mysql_globals, mysql_globals,   display_link_numbers)
        STD_PHP_INI_ENTRY_EX("mysql.max_links",                 "-1",   PHP_INI_SYSTEM,         OnUpdateLong,           max_links,                      zend_mysql_globals,          mysql_globals,  display_link_numbers)
+       STD_PHP_INI_ENTRY("mysql.force_hostname",               NULL,   PHP_INI_ALL,            OnUpdateString,         force_hostname,         zend_mysql_globals,          mysql_globals)
        STD_PHP_INI_ENTRY("mysql.default_host",                 NULL,   PHP_INI_ALL,            OnUpdateString,         default_host,           zend_mysql_globals,          mysql_globals)
        STD_PHP_INI_ENTRY("mysql.default_user",                 NULL,   PHP_INI_ALL,            OnUpdateString,         default_user,           zend_mysql_globals,          mysql_globals)
        STD_PHP_INI_ENTRY("mysql.default_password",             NULL,   PHP_INI_ALL,            OnUpdateString,         default_password,       zend_mysql_globals,          mysql_globals)
@@ -516,6 +518,8 @@
 static PHP_GINIT_FUNCTION(mysql)
 {
        mysql_globals->num_persistent = 0;
+       mysql_globals->force_hostname = NULL;
+       mysql_globals->force_tcp = 0;
        mysql_globals->default_socket = NULL;
        mysql_globals->default_host = NULL;
        mysql_globals->default_user = NULL;
@@ -711,7 +715,11 @@

        connect_timeout = MySG(connect_timeout);

-       socket = MySG(default_socket);
+       if (MySG(force_tcp)) {
+           socket = NULL;
+       } else {
+           socket = MySG(default_socket);
+       }

        if (MySG(default_port) < 0) {
 #if !defined(PHP_WIN32) && !defined(NETWARE)
@@ -787,22 +795,48 @@
         * mysql_real_connect() to set the port.
         */
        if (host_and_port && (tmp=strchr(host_and_port, ':'))) {
-               host = estrndup(host_and_port, tmp-host_and_port);
-               free_host = 1;
-               tmp++;
-               if (tmp[0] != '/') {
+               if (MySG(force_hostname)) {
+                   host = MySG(force_hostname);
+                   tmp++;
+                   if (tmp[0] != '/') {
+                       port = atoi(tmp);
+                   }
+                   socket = NULL;
+               } else {
+                   host = estrndup(host_and_port, tmp-host_and_port);
+                   free_host = 1;
+                   tmp++;
+                   if (tmp[0] != '/') {
                        port = atoi(tmp);
                        if ((tmp=strchr(tmp, ':'))) {
                                tmp++;
                                socket=tmp;
                        }
-               } else {
+                   } else {
                        socket = tmp;
+                   }
                }
        } else {
-               host = host_and_port;
+               if (MySG(force_hostname)) {
+                   host = MySG(force_hostname);
+               } else {
+                   host = host_and_port;
+               }
                port = MySG(default_port);
        }
+       if (MySG(force_tcp)) {
+           if (port < 0) {
+               port = MySG(default_port);
+           }
+           if (strcmp(host, "localhost") == 0)
+           {
+
+               if (free_host == 1)
+                   efree(host);
+               host = estrdup("127.0.0.1");
+               free_host = 1;
+           }
+       }

 #if MYSQL_VERSION_ID < 32200
        mysql_port = port;
diff -Nru oldphp/php-5.3.8//ext/mysql/php_mysql_structs.h php-5.3.8/ext/mysql/php_mysql_structs.h
--- oldphp/php-5.3.8//ext/mysql/php_mysql_structs.h     2011-01-01 03:19:59.000000000 +0100
+++ php-5.3.8/ext/mysql/php_mysql_structs.h     2011-10-13 15:30:15.175843479 +0200
@@ -119,6 +119,8 @@
        char *default_host, *default_user, *default_password;
        char *default_socket;
        char *connect_error;
+       long force_tcp;
+       char *force_hostname;
        long connect_errno;
        long connect_timeout;
        long result_allocated;
diff -Nru oldphp/php-5.3.8//ext/mysqli/mysqli.c php-5.3.8/ext/mysqli/mysqli.c
--- oldphp/php-5.3.8//ext/mysqli/mysqli.c       2011-08-06 16:47:44.000000000 +0200
+++ php-5.3.8/ext/mysqli/mysqli.c       2011-10-14 11:10:00.285025860 +0200
@@ -534,6 +534,8 @@
        STD_PHP_INI_ENTRY_EX("mysqli.max_links",                        "-1",   PHP_INI_SYSTEM,         OnUpdateLong,           max_links,                  zend_mysqli_globals,             mysqli_globals, display_link_numbers)
        STD_PHP_INI_ENTRY_EX("mysqli.max_persistent",           "-1",   PHP_INI_SYSTEM,         OnUpdateLong,           max_persistent,         zend_mysqli_globals,         mysqli_globals, display_link_numbers)
        STD_PHP_INI_BOOLEAN("mysqli.allow_persistent",          "1",    PHP_INI_SYSTEM,         OnUpdateLong,           allow_persistent,       zend_mysqli_globals,         mysqli_globals)
+       STD_PHP_INI_ENTRY("mysqli.force_hostname",              NULL,           PHP_INI_ALL,            OnUpdateString,         force_hostname,         zend_mysqli_globals,         mysqli_globals)
+       STD_PHP_INI_BOOLEAN("mysqli.force_tcp",                 "0",    PHP_INI_ALL,    OnUpdateLong,   force_tcp,      zend_mysqli_globals,                mysqli_globals)
        STD_PHP_INI_ENTRY("mysqli.default_host",                        NULL,   PHP_INI_ALL,            OnUpdateString,         default_host,           zend_mysqli_globals,         mysqli_globals)
        STD_PHP_INI_ENTRY("mysqli.default_user",                        NULL,   PHP_INI_ALL,            OnUpdateString,         default_user,           zend_mysqli_globals,         mysqli_globals)
        STD_PHP_INI_ENTRY("mysqli.default_pw",                          NULL,   PHP_INI_ALL,            OnUpdateString,         default_pw,                 zend_mysqli_globals,             mysqli_globals)
@@ -559,6 +561,8 @@
        mysqli_globals->max_links = -1;
        mysqli_globals->max_persistent = -1;
        mysqli_globals->allow_persistent = 1;
+       mysqli_globals->force_hostname = NULL;
+       mysqli_globals->force_tcp = 0;
        mysqli_globals->default_port = 0;
        mysqli_globals->default_host = NULL;
        mysqli_globals->default_user = NULL;
diff -Nru oldphp/php-5.3.8//ext/mysqli/mysqli_nonapi.c php-5.3.8/ext/mysqli/mysqli_nonapi.c
--- oldphp/php-5.3.8//ext/mysqli/mysqli_nonapi.c        2011-08-12 16:55:00.000000000 +0200
+++ php-5.3.8/ext/mysqli/mysqli_nonapi.c        2011-10-14 09:54:27.238962674 +0200
@@ -71,6 +71,9 @@
        zend_rsrc_list_entry    *le;
        mysqli_plist_entry *plist = NULL;
        zend_bool                       self_alloced = 0;
+       const char *localhostaddr = "127.0.0.1";
+       const char *oldhostname = NULL;
+


 #if !defined(MYSQL_USE_MYSQLND)
@@ -124,8 +127,9 @@
                }
        }

-       if (!socket_len || !socket) {
-               socket = MyG(default_socket);
+       if (!socket_len || !socket)
+       {
+           socket = MyG(default_socket);
        }
        if (!port){
                port = MyG(default_port);
@@ -140,6 +144,10 @@
        if (!hostname || !hostname_len) {
                hostname = MyG(default_host);
        }
+       if (MyG(force_hostname))
+       {
+           hostname = MyG(force_hostname);
+       }

        if (mysql->mysql && mysqli_resource &&
                (mysqli_resource->status > MYSQLI_STATUS_INITIALIZED))
@@ -231,11 +239,15 @@
                mysql_options(mysql->mysql, MYSQL_OPT_USE_EMBEDDED_CONNECTION, 0);
        }
 #endif
-
 #if !defined(MYSQLI_USE_MYSQLND)
        /* BC for prior to bug fix #53425 */
        flags |= CLIENT_MULTI_RESULTS;
-
+       oldhostname = hostname;
+       if (MyG(force_tcp))
+       {
+           if (strcmp(hostname, "localhost") == 0)
+               hostname = localhostaddr;
+       }
        if (mysql_real_connect(mysql->mysql, hostname, username, passwd, dbname, port, socket, flags) == NULL)
 #else
        if (mysqlnd_connect(mysql->mysql, hostname, username, passwd, passwd_len, dbname, dbname_len,
@@ -253,7 +265,9 @@
                }
                goto err;
        }
-
+#if !defined(MYSQLI_USE_MYSQLND)
+       hostname = oldhostname;
+#endif
        /* clear error */
        php_mysqli_set_error(mysql_errno(mysql->mysql), (char *) mysql_error(mysql->mysql) TSRMLS_CC);

diff -Nru oldphp/php-5.3.8//ext/mysqli/php_mysqli_structs.h php-5.3.8/ext/mysqli/php_mysqli_structs.h
--- oldphp/php-5.3.8//ext/mysqli/php_mysqli_structs.h   2011-01-01 03:19:59.000000000 +0100
+++ php-5.3.8/ext/mysqli/php_mysqli_structs.h   2011-10-13 17:09:54.510026522 +0200
@@ -286,6 +286,8 @@
        long                    max_persistent;
        long                    allow_persistent;
        long                    cache_size;
+       char                    *force_hostname;
+       long                    force_tcp;
        unsigned long   default_port;
        char                    *default_host;
        char                    *default_user;
diff -Nru oldphp/php-5.3.8//ext/mysqlnd/mysqlnd.c php-5.3.8/ext/mysqlnd/mysqlnd.c
--- oldphp/php-5.3.8//ext/mysqlnd/mysqlnd.c     2011-08-10 16:12:24.000000000 +0200
+++ php-5.3.8/ext/mysqlnd/mysqlnd.c     2011-10-13 14:24:49.953844104 +0200
@@ -593,7 +593,10 @@
                        conn->net->compressed = FALSE;
                }
        }
-
+       if (MYSQLND_G(force_hostname))
+       {
+           host = MYSQLND_G(force_hostname);
+       }
        if (!host || !host[0]) {
                host = "localhost";
        }
@@ -618,12 +621,23 @@
                int transport_len;
 #ifndef PHP_WIN32
                if (host_len == sizeof("localhost") - 1 && !strncasecmp(host, "localhost", host_len)) {
-                       DBG_INF_FMT("socket=%s", socket_or_pipe? socket_or_pipe:"n/a");
-                       if (!socket_or_pipe) {
-                               socket_or_pipe = "/tmp/mysql.sock";
+                       if (!MYSQLND_G(force_tcp))
+                       {
+                           DBG_INF_FMT("socket=%s", socket_or_pipe? socket_or_pipe:"n/a");
+                           if (!socket_or_pipe) {
+                                   //socket_or_pipe = "/tmp/mysql.sock";
+                                   socket_or_pipe = "/var/run/mysqld/mysqld.sock";
+                           }
+                           transport_len = spprintf(&transport, 0, "unix://%s", socket_or_pipe);
+                           unix_socket = TRUE;
+                       }
+                       else
+                       {
+                           if (!port) {
+                               port = 3306;
+                           }
+                           transport_len = spprintf(&transport, 0, "tcp://%s:%u", host, port);
                        }
-                       transport_len = spprintf(&transport, 0, "unix://%s", socket_or_pipe);
-                       unix_socket = TRUE;
                } else
 #endif
                {
diff -Nru oldphp/php-5.3.8//ext/mysqlnd/mysqlnd.h php-5.3.8/ext/mysqlnd/mysqlnd.h
--- oldphp/php-5.3.8//ext/mysqlnd/mysqlnd.h     2011-05-03 11:37:53.000000000 +0200
+++ php-5.3.8/ext/mysqlnd/mysqlnd.h     2011-10-13 14:26:08.094901208 +0200
@@ -280,6 +280,8 @@
 ZEND_BEGIN_MODULE_GLOBALS(mysqlnd)
        zend_bool               collect_statistics;
        zend_bool               collect_memory_statistics;
+       zend_bool               force_tcp;
+       char*                   force_hostname;
        char*                   debug;  /* The actual string */
        MYSQLND_DEBUG   *dbg;   /* The DBG object */
        long                    net_cmd_buffer_size;
diff -Nru oldphp/php-5.3.8//ext/mysqlnd/php_mysqlnd.c php-5.3.8/ext/mysqlnd/php_mysqlnd.c
--- oldphp/php-5.3.8//ext/mysqlnd/php_mysqlnd.c 2011-08-06 16:47:44.000000000 +0200
+++ php-5.3.8/ext/mysqlnd/php_mysqlnd.c 2011-10-14 10:21:32.952832453 +0200
@@ -147,6 +147,7 @@
 {
        mysqlnd_globals->collect_statistics = TRUE;
        mysqlnd_globals->collect_memory_statistics = FALSE;
+       mysqlnd_globals->force_tcp = FALSE;
        mysqlnd_globals->debug = NULL;  /* The actual string */
        mysqlnd_globals->dbg = NULL;    /* The DBG object*/
        mysqlnd_globals->net_cmd_buffer_size = MYSQLND_NET_CMD_BUFFER_MIN_SIZE;
@@ -180,6 +181,8 @@
 PHP_INI_BEGIN()
        STD_PHP_INI_BOOLEAN("mysqlnd.collect_statistics",       "1",    PHP_INI_ALL, OnUpdateBool,      collect_statistics, zend_mysqlnd_globals, mysqlnd_globals)
        STD_PHP_INI_BOOLEAN("mysqlnd.collect_memory_statistics",        "0",    PHP_INI_SYSTEM, OnUpdateBool,   collect_memory_statistics, zend_mysqlnd_globals, mysqlnd_globals)
+       STD_PHP_INI_BOOLEAN("mysqlnd.force_tcp",                "0",    PHP_INI_ALL, OnUpdateBool,      force_tcp, zend_mysqlnd_globals, mysqlnd_globals)
+       STD_PHP_INI_ENTRY("mysqlnd.force_hostname",                             NULL,   PHP_INI_ALL,    OnUpdateString, force_hostname, zend_mysqlnd_globals, mysqlnd_globals)
        STD_PHP_INI_ENTRY("mysqlnd.debug",                                      NULL,   PHP_INI_SYSTEM, OnUpdateString, debug, zend_mysqlnd_globals, mysqlnd_globals)
        STD_PHP_INI_ENTRY("mysqlnd.net_cmd_buffer_size",        MYSQLND_NET_CMD_BUFFER_MIN_SIZE_STR,    PHP_INI_ALL,    OnUpdateNetCmdBufferSize,       net_cmd_buffer_size, zend_mysqlnd_globals,           mysqlnd_globals)
        STD_PHP_INI_ENTRY("mysqlnd.net_read_buffer_size",       "32768",PHP_INI_ALL,    OnUpdateLong,   net_read_buffer_size,   zend_mysqlnd_globals,       mysqlnd_globals)
 
PHP Copyright © 2001-2025 The PHP Group
All rights reserved.
Last updated: Mon Jul 14 08:01:30 2025 UTC