2016-01-01 4 views
0

Я пытаюсь подключиться к базе данных, используя скрипт shell_exec, но я получаю:Соединение отклонено при использовании shell_exec

MySQLi :: MySQLi(): (HY000/2002): Нет такого файла или каталога.

При использовании сценария без shell_exec (пример: по кнопке отправки) он отлично работает.


О файле Вызывающий PHP:

shell_exec('php /Users/Desktop/save.php param') 

Вызывается PHP файл:

$a=$argv[1]; 
saveonDB($a); 

Я действительно не знаю, почему не работает при вызове функции с помощью shell_exec. Параметры передаются правильно.

Благодаря


UPDATE:

Я сделал пример проще:

connection.php:

function connect() 
{ 
    $servername = "localhost"; 
    $username = "root"; 
    $password = "root"; 
    $dbname= "db"; 

    $conn = new mysqli($servername, $username, $password, $dbname); 
    if ($conn->connect_error) { 
     die("Connection failed: " . $conn->connect_error); 
    } 
    else{ 
     echo "connected"; 
    } 

} 

connect(); 

caller.php:

echo exec ("php /Users/Desktop/connection.php"); 

При выполнении connection.php непосредственно, он говорит:

"связный"

При выполнении из caller.php он остается: не удалось

«Подключение: Нет такого файла или каталога "

+3

'saveonDB()' не является встроенной функцией. Каково его определение? У вас может быть ситуация, когда сокет соединения не найден через shell_exec, когда одно и то же соединение в противном случае работает с 'new mysqli()'. Пожалуйста, напишите больше кода. –

+0

shell_exec может не иметь полной среды оболочки, которую вы обычно используете. Проверьте свои пути, на которые вы ссылаетесь, чтобы узнать, можно ли найти все доступные вам файлы. –

+0

обновленный код, посмотрите – robot11

ответ

0

Я просто выясню, что произошло. Кажется, что при выполнении через shell_exec php использует mysql.sock. Порт соединения отличается при использовании MAMP. Установка порта на параметр имени сервера устраняет проблему.

Спасибо за вход.