PHP'nin shell_exec üzeri Ruby dosyası arayarak beklenmeyen bir davranış olduğunda ()

3 Cevap php

Ben bazı API çağrıları / ekran kazıma yapmak için kullanılıyor, bir Ruby komut dosyası var, ama bizim ana app PHP olduğunu. Bizim PHP uygulaması Ruby komut aramak için () shell_exec kullanıyor.

Komutu çağrıldığında ruby ​​script harika çalışıyor hat-ama PHP'nin kabuk exec üzerinden çağrıldığında rastgele erken çıkılıyor olacaktır.

İşte Ruby komut bir örnek:

#!/usr/bin/env ruby
require 'rubygems'
require 'mysql'
require 'net/http'
require 'open-uri'
require 'uri'
require 'cgi'
require 'fileutils'

# Bunch of code here ... works fine 
somePath = 'http://foo.com/bar.php'
# Seems to always exit when I do a Net::HTTP or open-uri call 
post = Net::HTTP.post_form(URI.parse(somePath),{'id'=>ID,'q'=>'some query'})
data = post.body
# OR 
data = open(somePath).read
# More code here ...

Yani, şimdiye kadar çıkarabiliriz tüm Ben net / http veya açık-uri çağrıları yoluyla harici bir URL okuma / kapmak çalıştığınızda her zaman çıktıktan olmasıdır. Ben atlayacağım sayfalar POST kabul veya GET istekleri, ama her iki şekilde çıkmadan gibi görünüyor olabilir.

Ben shell_exec çağrısından sonra PHP ile sonuç çıktısı değilim, ama hiçbir hata iletileri veya çıkar vardır. Ben burada ve orada ".... koyar" ile benim Ruby komut dosyası tarafından mesajları olmaktan çıktı var. Bir sorun (ben 'hayır' daha erken koyar mesajlar ile çıkmak değil, çünkü düşünüyorum) olabilir mi?

Kabuk çağrıldığında Yine, iyi çalışıyor. Bu shell_exec çağrı bitirmek için net / http çağrı için bekleyen değil, neredeyse gibi.

Herhangi bir fikir?

3 Cevap

Bu olay neden sadece bir Bilginize, ben gerçekten ortaya asla. Ben anlamak olabilir iyi izin sorunu bazı tip düzgün çalışmasını Ruby açık-uri komutları önlenmesi olmasıydı.

Ben bir db tablo bu işleri kuyruk ve periyodik cron üzerinden benim ruby ​​script çalıştırmak için seçti. Her şey ruby ​​script root / sudo Perma ile çalıştırıldığında iyi çalışıyor gibi görünüyor.

Ben bu konuda emin değilim, ama mantıklı seslerini açıklama, verilen, sen proc_open at all baktım:

http://us3.php.net/proc%5Fopen

Ruby'nin open-uri tempfile gerektirir, bu yüzden ben size ruby ​​script çalışan ve web sunucusu çalışan arasındaki bir dosya sahipliğini çatışma var tahmin ediyorum. Web sunucusu kullanarak geçici bir dosya oluşturabilir miyim tempfile?