3

LinuxターミナルのディレクトリをPHPの現在の作業ディレクトリではなく、 cliスクリプトから変更したいと思います。できればshell_exec()を使用してください。

例:user@host:~$からuser@host:/the/other/directory$

system()exec()許可されていません。

私の場合、これは機能していません。

$dir = '/the/other/directory';
shell_exec('cd '.$dir);

これらも

shell_exec('cd '.escapeshellarg($dir));
shell_exec(escapeshellcmd('cd '.$dir));
pclose(popen('cd '.$dir));

しかしshell_exec('ls '.$dir)、そのディレクトリのリストを教えてください。何かトリックはありますか?

4

3 に答える 3

2

あなたがやっているようにいくつかのコマンドを実行しているとき:

shell_exec('cd '.escapeshellarg($dir));
shell_exec(escapeshellcmd('cd '.$dir));

うまくいきません。最初のコマンドは 2 番目のコマンドとは関係がないため、1 番目のコマンドの結果を使用して 2 番目のコマンドを実行することはできません。

一連のコマンドを実行する場合は、次の|ようにパイプ記号を使用します。

echo shell_exec("ls /etc/apache2 | grep fileName");
于 2012-09-21T08:47:40.277 に答える
0

shell_exec によって行われたローカルの変更は、その php プロセスにのみ適用されるため、ls はその他のディレクトリから取得します。しかし、php を終了すると、bash に戻ります。bash は、プロセスが何を行っているかをまったく気にしません。

外部から bash の現在のディレクトリを変更できるとは思えません。他のディレクトリで bash を実行する必要がある場合は、php 内でこれを試すことができます。

system('gnome-terminal --working-directtory=/home/doom');

これにより、新しいディレクトリで別のターミナルが起動しますが、スクリプトはこのシェルを終了するまで待機します。

于 2012-05-05T16:31:54.457 に答える
0

php cli スクリプトを呼び出して親シェルのディレクトリを変更したい場合は、それを行うことはできません。あなたができることはせいぜい次のとおりです。

shell> eval `your/cli/script`

そしてあなたのスクリプトで次のようなことをします

<?php
...
    echo "cd $dir"

?>
于 2012-05-05T16:33:24.150 に答える