Bir PHP komut dosyası bir Python komut dosyası çağırırken, bir konsol kaçak oluşturulan geçici dosya, PHP çağırma yoluyla oluşturulur değil

3 Cevap php

Senaryo:

Ben bir Python komut dosyası dediğimiz bir php sayfası var.

Komut satırından (Linux) üzerinde çalışan Python komut komut satırında çıkış gösterir, hem de bir dosyaya yazıyor çıktı.

Php çalıştırmak Python komut, ya da yapmaz.

Ayrıntılama:

Ben python komut dosyasını çalıştırmak için PHP basit bir sistem komutu kullanın:

/var/www/html/1.php: system('/usr/python/bin/python3 ../cgi-bin/tabular.py 1');

/var/www/cgi-bin/tabular.py --This python file basically parses a data file, uses python's regular expression to search for specific headings and outputs the headings to the stdout, as well as write it to a file.

Bu python komut dosyası idam o birkaç rutinleri var, bu yüzden hata ayıklama ifadeleri baskı koydu. Ben PHP sayfasında sadece ilk birkaç baskı tablolar 'çıktı fark, aslında bir şey yok işlevi tüm olanları görülmez.

Ayrıca, benim testin parçası olarak, ben de py komut farklı bir klasörde yüzden bana / var / www / html klasöründe, hiçbir halindeyken onu değiştirmesine izin düşündüm.

Ben yeterli ayrıntı ile sorun deyimi yakalanan umut ve kimse onların sonunda bu sorunu yeniden yapabiliyor. Bu sefer kendimi herhangi bir ilerleme yaparsanız, ben bu soruyu açıklama olacak. Herkese teşekkürler.

Gaurav

3 Cevap

I bet your py script has some bug which couses it to break when called from inside PHP. Try

passthru('/usr/python/bin/python3 ../cgi-bin/tabular.py 1 2>&1');

(haber 2>&1 hangi causess stderr stdout yazılacak) araştırmak.

A permission problem, büyük olasılıkla bir durumdur.

Apache apache olarak çalışıyorsa, o zaman bir dosyaya sürece yazmak için erişim olmayacaktır

  1. Dosya apache aittir
  2. Dosya apache ve grup yazılabilir grubunda olan
  3. Dosya Dünya yazılabilir

Farklı insanlar Apache erişim gibi bu, çok kullanıcılı bir makineye bir "yapışkan" bir sorundur.

Dosya üzerinde chmod 666 output.txt deneyin ve daha sonra test yeniden çalıştırın.


Considerations:

  1. Python komut dosyası bir veritabanına çıktı yazmak var
  2. Sürecini açmak ve boruları üzerinden iletişim kurmak için PHP'nin popen işlevini kullanın
  3. PHP'nin Düzenli ifadeler kullanarak yeniden yazmak
  4. / Tmp çıktı dosyası yazmak ve sonra en kısa sürede python komut dosyası yapıldığı gibi PHP kullanarak sonuçları okuyun.
  5. vs ..

Python komut dosyası çalıştıran kullanıcı CWD'sindeki yazma izinlerine sahip olduğundan emin olun. Ayrıca, () (komut aramak yerine, sistemi) shell_exec () veya passthru deneyin.