Выполнение внешней программы

autosoft

Guest
Выполнение внешней программы

Подскажите как правильно записать команду для выполнения внешней программы если в полном пути к ней содержатся пробелы?

Выполнение следующего кода:
PHP:
$cmd = sprintf("\"%s\" -B -USER %s -PASS %s \"%s\" \"%s\"",
'C:/Program Files/Firebird/Firebird_1_5/bin/gbak.exe', 'SYSDBA', 'masterkey',
'D:/base/base.gdb', 'D:/base/base.backup');

exec($cmd);
вызывает ошибку:

"C:/Program" не является внутренней или внешней
командой, исполняемой программой или пакетным файлом.

Хотелось бы знать почему.
 

MeLLowD

Guest
Re: Выполнение внешней программы

Во первых, слэши должны быть обратными.

C:\Progra~1\Firebird\Firebird_1_5\bin\gbak.exe
 

Кром

Новичок
Попробуй взять строку в кавычки.
'"C:/Program Files/Firebird/Firebird_1_5/bin/gbak.exe"'
 

autosoft

Guest
С любыми слешами результат тот же.

По поводу кавычек. Посмотрите пожалуйста внимательно показанный пример кода.

В переменной $cmd содержимое следующее:

"C:\Program Files\Firebird\Firebird_1_5\bin\gbak.exe" -B -USER SYSDBA -PASS masterkey "D:\base\base.gdb" "D:\base\base.backup"

Разве этих кавычек недостаточно?
 

MeLLowD

Guest
я же написал:
C:\Progra~1\Firebird\Firebird_1_5\bin\gbak.exe
 

autosoft

Guest
А если короткое имя заранее неизвестно?
 

Profic

just Profic (PHP5 BetaTeam)
Код:
E:\work\web\SDN\recipe-nddocs\php>php
<?php
system("\"c:\\web files\\mysql41\\bin\\mysql.exe\" --version");
?>
^Z
c:\web files\mysql41\bin\mysql.exe  Ver 14.7 Distrib 4.1.8, for Win95/Win98 (i32)

E:\work\web\SDN\recipe-nddocs\php>
 

autosoft

Guest
Пробовал выполнить:

<?php

system("\"c:\\web files\\mysql41\\bin\\mysql.exe\" --version");

?>

Рузультат:

"c:\web" не является внутренней или внешней
командой, исполняемой программой или пакетным файлом.

Использую PHP 5.0.4
 

Profic

just Profic (PHP5 BetaTeam)
понятное дело. этот путь должен существовать. иначе возвращается такая ошибка

запуск программ с пробелом в имени - тот еще секс :)
 

zap

Guest
Автор оригинала: Profic
понятное дело. этот путь должен существовать. иначе возвращается такая ошибка

запуск программ с пробелом в имени - тот еще секс :)
а че трудно привести имена файлов и папок к системе 8.3!!

тобиш: exec("c:\\progra~1\\firebird\\firebi~1\\bin\gbak.exe",$value);

вот и все!!
 

Profic

just Profic (PHP5 BetaTeam)
zap
да ты ниче не понимаешь!!!!
ты не можешь быть уверен, что у него нет каталог с именем, например, "C:\Program Files\Firebird\Firebird_1_0"!!!
так что не советуй, то что всегда не работает!!!

ps. вот и все!!!
 
Сверху