PHP - действительно ли этот синтаксис выполняет команду? - PullRequest
0 голосов
/ 10 января 2020

При попытке очистить какой-то старый код в проекте я запустил следующие строки:

$cmd = "mkdir -p ".dirname($target);
`$cmd`; // Auto creating folder if needed

Я попытался запустить это на отдельном скрипте, и он не создает папку (как я ожидал) , но мне интересно, если я что-то упустил, где это на самом деле может работать?

Примечание: $cmd больше нигде не используется

1 Ответ

1 голос
/ 10 января 2020

Как и другие члены, уже упомянутые обратные пометки оператор выполнения . Вы могли бы проверить, получили ли вы какой-либо вывод команды, используя echo перед «выполнением», как показано ниже:

$cmd = "mkdir -p ".dirname($target);
echo `$cmd`;

В любом случае ИМХО использование обратных галочек может быть немного запутанным, поэтому вы можете использовать shell_exe c () что более понятно, что там происходит. Например:

<code>$output = shell_exec("mkdir -p ".dirname($target));
echo "<pre>$output
";

С другой стороны, действительно ли вам нужно создавать каталог таким образом? Вы можете заменить его, используя mkdir () работает, как следующий откорректированный пример из документации:

if (!mkdir(dirname($target), 0777, true)) { // true argument stands for recursive - equivalent of -p in mkdir in linux command
    die('Failed to create folders...');
}
// mkdir() function returns boolean value so you can easily know if directory was created or not

Относительно места, где создается ваш каталог, я бы посмотрел, что возвращается из dirname () из $target и getcwd () функция для текущего рабочего каталога, чтобы увидеть, все ли как положено.

echo dirname($target);
echo getcwd();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...