Установите сокет MySQL по умолчанию в PHP, pdo mysql.сокет по умолчанию PHP 5.3

У меня проблема с установкой местоположения сокета PDO по умолчанию для MySQL, не делая этого через инициализацию класса PDO в переменную. Я попытался изменить mysql.переменная default_socket. Но радости от этого не было. Единственный способ, который работает в настоящее время, - это создание экземпляра DSN класса.

php.содержимое ini:

[PHP]
engine = On
zend.ze1_compatibility_mode = Off
short_open_tag = On
asp_tags = Off
precision    =  14
y2k_compliance = On
output_buffering = 4096
zlib.output_compression = Off
implicit_flush = Off
unserialize_callback_func=
serialize_precision = 100
allow_call_time_pass_reference = Off
safe_mode = Off
safe_mode_gid = Off
safe_mode_include_dir =
safe_mode_exec_dir =
safe_mode_allowed_env_vars = PHP_
safe_mode_protected_env_vars = LD_LIBRARY_PATH
disable_functions =
disable_classes =
expose_php = Off
max_execution_time = 300
max_input_time = 60
memory_limit = 128M
error_reporting = E_ALL & ~E_NOTICE
display_errors = Off
display_startup_errors = Off
log_errors = On
log_errors_max_len = 1024
ignore_repeated_errors = Off
ignore_repeated_source = Off
report_memleaks = On
track_errors = Off
variables_order = "EGPCS"
register_globals = Off
register_long_arrays = Off
register_argc_argv = Off
auto_globals_jit = On
post_max_size = 8M
magic_quotes_gpc = Off
magic_quotes_runtime = Off
magic_quotes_sybase = Off
auto_prepend_file =
auto_append_file =
default_mimetype = "text/html"
doc_root =
user_dir =
extension_dir = "/usr/lib64/php/modules"
enable_dl = On
file_uploads = On
upload_max_filesize = 500M
allow_url_fopen = On
default_socket_timeout = 60

[Syslog]
define_syslog_variables  = Off

sendmail_path = /usr/sbin/sendmail -t -i

[SQL]
sql.safe_mode = Off

[ODBC]
odbc.allow_persistent = On
odbc.check_persistent = On
odbc.max_persistent = -1
odbc.max_links = -1
odbc.defaultlrl = 4096
odbc.defaultbinmode = 1

[MySQL]
mysql.allow_persistent = On
mysql.max_persistent = -1
mysql.max_links = -1
mysql.default_port = 3306
mysql.default_socket = /home/mysql/mysql.sock
mysql.default_host = 127.0.0.1
mysql.default_user = conner
mysql.default_password = danica4eva
mysql.connect_timeout = 60
mysql.trace_mode = Off

[MySQLi]
mysqli.max_links = -1
mysqli.default_port = 3306
mysqli.default_socket = /home/mysql/mysql.sock
mysqli.default_host = 127.0.0.1
mysqli.default_user = conner
mysqli.default_pw = danica4eva
mysqli.reconnect = Off

[mSQL]
msql.allow_persistent = On
msql.max_persistent = -1
msql.max_links = -1

[PostgresSQL]
pgsql.allow_persistent = On
pgsql.auto_reset_persistent = Off
pgsql.max_persistent = -1
pgsql.max_links = -1
pgsql.ignore_notice = 0
pgsql.log_notice = 0

[Sybase]
sybase.allow_persistent = On
sybase.max_persistent = -1
sybase.max_links = -1
sybase.min_error_severity = 10
sybase.min_message_severity = 10
sybase.compatability_mode = Off

[Sybase-CT]
sybct.allow_persistent = On
sybct.max_persistent = -1
sybct.max_links = -1
sybct.min_server_severity = 10
sybct.min_client_severity = 10

[bcmath]
bcmath.scale = 0

[Informix]
ifx.default_host =
ifx.default_user =
ifx.default_password =
ifx.allow_persistent = On
ifx.max_persistent = -1
ifx.max_links = -1
ifx.textasvarchar = 0
ifx.byteasvarchar = 0
ifx.charasvarchar = 0
ifx.blobinfile = 0.
ifx.nullformat = 0

[Session]
session.save_handler = files
session.save_path = "/var/lib/php/session"
session.use_cookies = 1
session.name = PHPSESSID
session.auto_start = 0
session.cookie_lifetime = 0
session.cookie_path = /
session.cookie_domain =
session.serialize_handler = php
session.gc_probability = 1
session.gc_divisor     = 1000
session.gc_maxlifetime = 1440
session.bug_compat_42 = 0
session.bug_compat_warn = 1
session.referer_check =
session.entropy_length = 0
session.entropy_file =
session.cache_limiter = nocache
session.cache_expire = 180
session.use_trans_sid = 0
session.hash_function = 1
session.hash_bits_per_character = 5
url_rewriter.tags = "a=href,area=href,frame=src,input=src,form=fakeentry"

[MSSQL]
mssql.allow_persistent = On
mssql.max_persistent = -1
mssql.max_links = -1
mssql.min_error_severity = 10
mssql.min_message_severity = 10
mssql.compatability_mode = Off
mssql.secure_connection = Off

[Verisign Payflow Pro]
pfpro.defaulthost = "test-payflow.verisign.com"
pfpro.defaultport = 443
pfpro.defaulttimeout = 30

[Tidy]
tidy.clean_output = Off

[soap]
soap.wsdl_cache_enabled=1
soap.wsdl_cache_dir="/tmp"
soap.wsdl_cache_ttl=86400

zend_extension = /etc/ioncube/ioncube_loader_lin_5.3.so

Как вы можете видеть, я изменил настройки сокета по умолчанию в файле php.ini-файл, но я все равно получаю ошибку сокета в PDO когда я пытаюсь подключиться к MySQL. Это заставляет меня поверить, что драйвер PDO не использует настройки из php.ini. Я был уверен, что есть какой-то способ настройки PDO, но в моем php ничего не было.ini. Должны ли быть настройки для PDO в php.Ини, или они содержатся в другом месте?

1 ответов


существует другая настройка ini для драйвера PDO mysql. Она называется

pdo_mysql.default_socket

вы пытались установить это значение в ini? Пожалуйста, обратитесь к http://php.net/manual/de/ref.pdo-mysql.php

на значение также можно влиять во время компиляции, используя следующую опцию Настройки:

--with-mysql-sock=/my/path/mysql.sock

обновление: я понял, что проблема известная ошибка PHP.

во-первых: вы можете решение проблемы при использовании 127.0.0.1 в качестве хоста БД вместо localhost. PHP будет подключаться через TCP-сокет таким образом.

чтобы изменить местоположение, вам придется скомпилировать PHP из источников со специальными параметрами конфигурации. Мне удалось изменить местоположение сокета mysql со следующими (базовыми) командными строками:

 ./configure \
  --with-mysql \
  --with-mysqli=mysqlnd \
  --enable-pdo \
  --with-pdo-mysql=mysqlnd \
  --with-mysql-sock=/home/mysql/mysqld.sock

 make
 make install

последний трюк сделал комбинацию из последних обоих. --with-mysql-sock=file устанавливает расположение .файл носка но он просто используется, если --with-pdo-mysql= установлено значение mysqlnd (собственный драйвер mysql). Если этот параметр отсутствует, pdo будет связан с libmysqlclient из системы. В результате этого вы также можете перекомпилировать libmysqlclient (с измененным путем сокета) и оставить php нетронутым.

Примечание: это только базовая конфигурация, чтобы PHP работал с PDO. Вам понадобятся дополнительные параметры конфигурации, если вам нужны дополнительные расширения (например, JSON, xml, что угодно). Вы найдите конфигурацию, которую ваш дистрибутив Linux использовал для компиляции PHP, если вы выполняете (исходную версию дистрибутива) следующим образом:php -i.