PHP ile linux komutları yürütülüyor

6 Cevap php

Ben exec komutunu kullanarak hiçbir sorun bir PHP komut satırı komut dosyası aracılığıyla bir linux komutu çalıştırmak için çalışıyorum.

Sorun bir şey (örneğin, kullanıcı / şifre yanlış) yanlış ise I (mysqldump) yürütülürken ediyorum komut bir hata mesajı verir, olduğunu. Ben bunu log için bu hatayı yakalamak mümkün görünmüyor olabilir. Sadece ekran bu hatayı yazdırır.

Nasıl bu hata ekrana basılacak, ancak bunun yerine benim komut dosyası kullanmak için bir değişken koymak değil neden mi?

Teşekkürler!

6 Cevap

popen işlemini çalıştırmak için kullanın. Bu sayfada örnek # 2 aradığınız tam olarak ne gösteriyor:

<?php
error_reporting(E_ALL);

/* Add redirection so we can get stderr. */
$handle = popen('/path/to/spooge 2>&1', 'r');
echo "'$handle'; " . gettype($handle) . "\n";
$read = fread($handle, 2096);
echo $read;
pclose($handle);
?>

Sen redirect stderr to stdout gerekiyor, bu yüzden onu yakalayabilir. Bu örnek yolları (böylece bunu ignoreing) devnull için stdout ve yolları size stderr:

exec('ls * 2>&1 1>/dev/null');

Ben (... Yeni Yıl Çözünürlük) Unix çok sıcak değilim ama bu fonksiyonlar faydalı bakmak:

  • shell_exec - döndürür bir dizge olarak sonuçlanabilir.
  • passthru('command', $result); ve ardından kullanmak $result: - passthru Bu böyle yürütebilirsiniz gibi görünüyor.

backticks kullanarak çalıştı?


$var = `command`;

Normal çıkış olarak aynı yere güzergahın stderr'nin mesajları izleyerek.

exec("mysql_dump blah 2>&1",$output,$return_val)
if($return_val !== 0) 
echo "there was an error"

2> & 1 stdout'ta olarak aynı yere yeniden rota stderr iletileri anlamına gelir ve dolayısıyla çıkış diziye yüklenir.

Eğer system() komuta baktınız mı? Ben herhangi bir PHP yaptım beri bir süre oldu, ama bu bir zili çalar bulunuyor.