У меня есть сценарий, который вызывает mysql_connect()
для подключения к базе данных MySQL. Когда я запускаю скрипт в браузере, он работает. Однако, когда я запускаю его из командной строки, я получаю следующую ошибку:
Call to undefined function mysql_connect()
Это кажется совершенно парадоксальным. У любого есть идеи, как я могу запустить его из командной строки. Кстати, я запускаю его из оболочки bash так:
php /path/to/script.php
Возможно, он использует конфигурацию PHP по умолчанию. Я обнаружил, что он не использует тот же php.ini или не использует его вообще. Поэтому некоторые расширения не будут включены.
Сделайте это вместо этого:
php -c /etc/php.ini /path/to/script.php
Где /etc/php.ini
– это путь к вашему ini-файлу. Вы можете найти это, выполнив phpinfo();
Проверьте, действительно ли у php cmd-версии есть поддержка mysql:
<? PHP echo php_info () ?>
Если нет, то, вероятно, это потому, что это другая версия, чем та, что используется вашим веб-сервером.
Запустите php, используя параметр «-m», чтобы перечислить все скомпилированные модули:
$ php -m
Вы должны увидеть модуль «mysql». Если нет, то я думаю, что версия php cmd не была скомпилирована с использованием -with-mysql, или сценарий «configure» не смог включить ее по какой-то причине.
Хотя это может быть рудиментарный ответ, убедитесь, что у вас есть самый современный PHP-клиент, и убедитесь, что он смотрит на ту же папку PHP, с которой вы работаете через Apache.
Если это не сработает, попробуйте сыграть с mysqli и посмотрите, глобально ли это для всей части PHP PHP. Если mysqli работает, а mysql_connect () не подходит, ну, значит, это так же хорошо, как и любой swtich на стороне OO 🙂
php-cli.ini может быть файлом, который использует ваш интерпретатор php-интерпретатора командной строки.
Убедитесь, что эта строка отображается в php.ini
расширение = php_mysql.dll
Обратите внимание, что php.ini, используемый в командной строке, может отличаться от php.ini, используемого apache.
Эта проблема может возникнуть, если вы используете Mac OS X и MAMP. Версия командной строки пытается использовать версию MAC OS X, которая, по умолчанию, не загружает php.ini.
Вы можете проверить это с помощью команды:
php --ini
См. Отсутствующий файл конфигурации?
Configuration File (php.ini) Path: /etc Loaded Configuration File: !!! THE CONFIG FILE IS MISSING HERE !!! Scan for additional .ini files in: /Library/Server/Web/Config/php Additional .ini files parsed: (none)
Что вам нужно сделать, загрузите php.ini по своему выбору и скопируйте его в местоположение по умолчанию вашего интерпретатора командной строки, которое есть / etc, а затем снова запустите указанную выше команду, вы увидите, что файл php.ini который должен выглядеть так:
Configuration File (php.ini) Path: /etc Loaded Configuration File: /etc/php.ini Scan for additional .ini files in: /Library/Server/Web/Config/php Additional .ini files parsed: (none)
Вы также должны добавить это в файл PHP.ini в / etc
mysql.default_socket = /Applications/MAMP/tmp/mysql/mysql.sock
Это должно исправить каждую проблему.
уф ..
Моя система – CentOS. В моем случае путь к mysql.so неверен.
Когда я печатаю
php -m
Нет mysql.
В моем исходном файле /etc/php.d/mysql.ini есть только одна строка:
extension=mysql.so
Поэтому я использую команду:
rpm -ql php-mysql | grep mysql.so
для выяснения правильного пути, который
/usr/lib64/php/modules/mysql.so
затем я заменил строку на:
extension=/usr/lib64/php/modules/mysql.so
тогда
service httpd restart
а также
php -m
mysql теперь загружен.