PHP: exec (svn commit) herhangi bir hata dönmeden ne çalışmıyor

3 Cevap php

Şu anda bir dizine php ile dosyaları yazıyorum, ben bu dizini (çalışıyor), eklemek sonra ben denemek ve bir svn onun çalışma ne hata kodlarının her türlü dönen yok taahhüt ne zaman. Herkes bu konuda herhangi bir fikir var mı?

$tmp = exec('cd '.$this->build_locations[$this->type].'; svn commit --username user --password pw; ls', $output);

Ben (burada ls amele para cezası did) dizine cd yapın, ben dizinde onun hala onaylamak için sonradan bir ls yapmak.

Ben de denedim:

svn help

bu yüzden svn komutu bulmak ile değil, onun değil bir sorunu biliyorum (gayet bana bütün komutları döndürür.

Ben yürütebilirsiniz onaylamak için dosyayı 777 CHMOD değeri ettik.

Düzenlendi Kodu:

    $output = array();
    $tmp1 = exec("cd ".$this->build_locations[$this->type].";");
    $tmp = exec("svn commit ".$this->build_locations[$this->type].$this->app_id." --username user --password password -m 'test' --non-interactive --trust-server-cert --quiet 2>&1;", $output, $error);
    if($error){
        echo('<pre>');
        print_r($output);
        echo('</pre>');
    }
    exit;

Bu üretir:

Array

    [0] => could not lookup DNS configuration info service: (ipc/send) invalid destination port
    [1] => svn: Commit failed (details follow):
    [2] => svn: Unknown hostname 'my.host'

3 Cevap

SVN komut satırı hataları onları görmek mümkün değildir neden olan değil, stdout, stderr'e gidin. Ne yapmak istediğiniz Stdout'a stderr'yi yönlendirmek ve ardından print_r($output) hatanın nedenini belirlemektir.

exec('svn commit <stuff> 2>&1', $output, $returnStatus);
if ( $returnStatus )
{
    print_r($output);
}

Örnek çıktı:

Array
(
    [0] => svn: Commit failed (details follow):
    [1] => svn: '/path/to/<stuff>' is not under version control
)

Aksi takdirde gereksiz olacağını zaman stdout stderr'nin karışımları çünkü bu ideal değildir, ama bu durumda istenen çıktı almak için başka bir yol bilmiyorum. Başkası yaparsa, yorum lütfen.

Siz de bunun için buna göre kod çimdik gerekir böylece exec(...), değil hata mesajı, status dönüş için Note: Üçüncü parametre.

2>&1 değişiklik yaptıktan sonra hata çıktı sorunun kök nedenini çözmeye yardımcı olmazsa, burada yeni çıktı gönderin.

Edit after new information:

Eğer başka bir yerden sunucuya bu SVN çalışma kopyasını yükleyebilir mi? İşte bu hatayı açıklar.

Benim yerel deposundan çalışan bir kopyasını kontrol ederseniz, ben aynı hatayı alıyorum, benim uzak sunucuya yükleyin, ve sonra işlemek deneyin.

Bu durumda ise, bunu işlemek edebilmek amacıyla çalışma kopya on the server running the PHP script in "svn checkout" yürütmek gerekiyor. Bu sunucu arşivden sunucusu ile iletişim kuramıyor, o bambaşka bir sorun.

Eğer errors (Ahmet'in yorum okumak) durumunu atma deneyebilirsiniz.

('cd '.$this->build_locations[$this->type].'; svn commit --username user --password pw; ls', $output, $error);
if($error){
   print_r($error);
}

Ben amacı hata ayıklama için 3 ayrı komutlar halinde yukarıdaki kırmak için öneririm.

Olur ki, .; cat /etc/passwd: $ this-tip kullanıcılar tarafından manipüle edilebilir eğer onlar gibi bir şey geçebilir olarak da, daha sonra kod savunmasızdır

$tmp = exec('cd .; cat /etc/passwd; svn commit --username user --password pw; ls', $output);

-m seçeneği sağlanır değilse AFAIK, bir svn commit, bir editör taahhüt mesaj yazın açılır sonra. -m "Some commit message", belki de yardım edeceğiz geçen deneyin.