質問

PHP:複数行のコマンドライン出力を異なる行として出力します。 タイトルがわかりにくい場合は申し訳ありません。基本的に、BではなくAのような出力が必要です。現在はBのように見えます。nl2brを試しました。私が実行しようとしているスクリプトは次のとおりです。

スクリプト:

echo "Virus Scan Results:";
$scanme = system('cd /var/www/upload/files; clamscan --remove=yes '.$furl);
printf(nl2br($scanme));

A:

802931t_e_s_t.txt: OK 
----------- SCAN SUMMARY ----------- 
Known viruses: 574585 
Engine version: 0.95.1 
Scanned directories: 0 
Scanned files: 1 
Infected files: 0 
Data scanned: 0.00 MB 
Data read: 0.00 MB (ratio 0.00:1) 
Time: 2.352 sec (0 m 2 s) 
Time: 2.352 sec (0 m 2 s)

B:

802931t_e_s_t.txt: OK ----------- SCAN SUMMARY ----------- Known viruses: 574585 Engine version: 0.95.1 Scanned directories: 0 Scanned files: 1 Infected files: 0 Data scanned: 0.00 MB Data read: 0.00 MB (ratio 0.00:1) Time: 2.352 sec (0 m 2 s) Time: 2.352 sec (0 m 2 s)

役に立ちましたか?

解決

nl2brがコマンドラインにあるのになぜ使用するのですか?

nl2brは、新しい行の<br />タグを出力します...コマンドラインでは意味がありません

編集

2つのこと:

1 試す

system('cd /var/www/upload/files; clamscan --remove=yes '.$furl, $scanme);

2 execを使用できますシステムではなく関数

e.g。

exec('cd /var/www/upload/files; clamscan --remove=yes '.$furl, $scanme);
$scanme = implode("\n",$scanme);

exec(string $ command [、array <!> amp; $ output [、int <!> amp; $ return_var]])

他のヒント

コマンドの出力を直接印刷してみましたか?

echo "Virus Scan Results:";
echo exec('cd /var/www/upload/files; clamscan --remove=yes '.$furl);

PS。本当にそのように入力をサニタイズする必要があります(まだそうしていない場合):

$furl = escapeshellarg($furl)

escapeshellarg()-使用する文字列をエスケープするシェル引数

コマンドラインで実行している場合、改行はWindows環境では「\ n」または「\ r \ n」として表されます。したがって、各行の最後に\ nがあることを確認し、必要な出力を取得する必要があります。 編集:
トム:おっと。修正。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top