Exec ile php php arama () hiçbir sonuç verir

6 Cevap php

Ben kullanıcı girişi dayalı diğer PHP dosyaları oluşturur bir PHP komut dosyası var. Temelde, dil belirli sabitleri (define) kullanıcı tarafından tercüme edilebilir içeren dosyaları vardır. Çalışma zamanı hataları önlemek için, ben (nedeniyle "olağandışı" karakter dizilerinden) ayrıştırma hataları için yeni yazılmış dosyaları test etmek istiyorum. Ben ({[1) (]} gibi) SO burada birkaç mesajlarını okumak ve kullanan bir işlevi denedim

$output = exec("php -l $filename");

Bir dosya doğru ayrıştırmak belirlemek için. Bu benim yerel makinede mükemmel çalışır, ancak sağlayıcının makinede de, çağrı çıkış exec("php ...") hep boş görünüyor. I ls bir çağrı çalıştı ve PHP şekilde komut satırı çağırmaları ya kadar tepki yapılandırılmış olduğunu varsayımı beni götürüyor, bana çıkış verir. Herkes bu etrafında bir yol biliyor mu?

EDIT:, zaten shell_exec denemişti ben söylemeyi unuttum ve bu ya, hiçbir sonuç verir. Sganesh en yanıta yanıt: Ben de üzgünüm söylemeyi unutmuşum çalışmıştı. Ancak, çıkış (ikinci argüman) daima boş bir dizi olacak ve test etmek için PHP dosyası sözdizimi hataları veya varsa dönüş değeri her zaman, ne olursa olsun 127 olacaktır.

6 Cevap

Ben farklı bir yöntem kullanarak özgün benim soruna çalıştı. İşte ben şimdi ne olduğunu:

  1. Içeriği ile geçici bir dosya yazmak <?php include "< File to test >"; echo "OK"; ?>
  2. Geçici dosya için doğru URL'yi Oluştur
  3. Bu URL'ye HTTP isteği yapar
  4. Sonuç "Tamam" eşittir olmadığını kontrol edin. Eğer evet ise, test dosyası hataları olmadan ayrıştırır.
  5. Geçici dosyayı silmek

Belki bu doğrudan test dosyasına giden bir HTTP isteği düzenlenmek suretiyle geçici dosya olmadan yapılabilir. Orada bir ayrıştırma hatası ve hataları bastırılır Ancak, çıkış yok ayrıştırma hatası veren bir dosya halinde çıktı boş ve fark edilmez olacak. Dosya aslında yerine sadece kontrol idam edilir, çünkü bu yöntem riskli. Benim durumumda, ilk etapta bu işlevi erişimi olan kullanıcılara sınırlı sayıda sadece vardır. Yine de, doğal olarak onunla tamamen mutlu değilim.

exec() yaklaşım işe yaramadı neden hala tam olarak bilmiyorum. Pinaki PHP yürütülebilir tam yolu sağlamak için önererek doğru olabilir, ama ben tam yolunu bulamıyor.

Cevap için herkese teşekkür ederim, hepinizi upvoted. Senin önerilerin hiçbiri gerçekten benim sorunum çözüldü Ancak, ben cevaplar hiçbirini kabul edemez.

You can try with exec second and third arguments. second argument will have the output of the command. third argument will have the return value.

Ve exec komutu sadece son satırı dönecektir.

$filename = "a.php";
$output = exec("php -l $filename",$op,$ret_val);
print $output."\n";
print $ret_val."\n";
var_dump($op);

Ben aynı problem vardı. Benim için çalıştı çözüm bulundu running-at-from-php-gives-no-output. Ben çıkış yönlendirme eklemek gerekiyordu.

$output = exec("php -l $filename 2>&1");

Eğer komut satırı üzerinden bu dosyayı idam sanki shell_exec () yürüterek, çıktıyı görebilirsiniz. Bir hata burada varsa sadece görebilirsiniz.

<?php
if (strpos(shell_exec('php -l file.php'), 'Syntax Error')) {
    die('An error!');
}

Ayrıca shell_exec () veya exec () ev sahibi tarafından devre dışı olması ihtimali olabilir.

Güzel bir fikir :-) dosya geçerliliğini kontrol etmek!

Şimdi, exec için PHP manuel ():

Not: Güvenli mod etkinleştirildiğinde, yalnızca safe_mode_exec_dir içinde dosyaları yürütebilirsiniz. Pratik nedenlerden dolayı, şu anda yürütülebilir yolunda bileşenleri izin verilmez.

Bu sizin için durum böyle değil eğer kontrol edebilirim?

Ayrıca, yerine sadece php exec PHP yorumlayıcı tam yolunu () sağlayarak kontrol edebilirsiniz. Bana ücret nasıl bildirin.

Pinaki

doğru yolu ImageMagick kullanarak bir pencere sistemi üzerinde test olarak >2&1 eklemek için!