{"id":251,"date":"2009-07-15T20:24:26","date_gmt":"2009-07-15T18:24:26","guid":{"rendered":"http:\/\/hjacob.com\/blog\/?p=251"},"modified":"2009-08-15T18:06:37","modified_gmt":"2009-08-15T16:06:37","slug":"php-scripte-in-rails-ausfuehren","status":"publish","type":"post","link":"https:\/\/hjacob.com\/blog\/php-scripte-in-rails-ausfuehren\/","title":{"rendered":"PHP Scripte in Rails ausf\u00fchren"},"content":{"rendered":"<p>Vorweg muss ich etwaige Hoffnungen auf einen direkten PHP Parser in Ruby bzw. Rails entt\u00e4uschen. In diesem Post m\u00f6chte ich jedoch erkl\u00e4ren wie man PHP Scripte (oder andere Shell Commands) ausf\u00fchrt und dann in Rails bzw. Ruby weiterverarbeitet. Wer sich etwas mit der Materie auskennt, ist verleitet system() oder exec() des <a href=\"http:\/\/ruby-doc.org\/core\/classes\/Kernel.html\">Ruby Kernel Moduls<\/a> zu verwenden, allerdings f\u00fchren diese das gew\u00fcnschte Script lediglich aus, ohne etwaige Ausgaben abzufangen. Ich m\u00f6chte aber in meinem Beispiel <b>das Ergebnis des externen Scriptes in einer Variable speichern<\/b>.<\/p>\n<p><!--more und so gehts ... --><\/p>\n<p>Anstatt Kernel#system() habe ich Backticks verwendet und so sieht das ganze dann aus:<br \/>\n[sourcecode lang=&#8220;ror&#8220;]<br \/>\nergebnis = `php -f script.php`<br \/>\np &quot;Ergebnis: #{ergebnis}&quot;<br \/>\n[\/sourcecode]<\/p>\n<p>Angenommen man m\u00f6chte nun noch Variablen von Ruby an das PHP Script \u00fcbergeben, h\u00e4ngt man diese einfach an das Ende des Shell Befehls an, dabei werden mehrere Variablen mittels Leerzeichen getrennt:<br \/>\n[sourcecode lang=&#8220;ror&#8220;]<br \/>\nergebnis = `php -f script.php #{@var1} #{@var2}`<br \/>\np &quot;Ergebnis: #{ergebnis}&quot;<br \/>\n[\/sourcecode]<\/p>\n<p>In PHP k\u00f6nnen diese Variablen dann wie folgt abgerufen werden:<br \/>\n[sourcecode lang=&#8220;php&#8220;]<br \/>\n$var1 = $_SERVER[&#8218;argv&#8216;][1];<br \/>\n$var2 = $_SERVER[&#8218;argv&#8216;][2];<br \/>\n[\/sourcecode]<\/p>\n<p>Der Index 0 des $_SERVER[&#8218;argv&#8216;] Arrays beinhaltet \u00fcbrigens den Scriptnamen. <\/p>\n<p>Nat\u00fcrlich muss man man bei solchen Operationen <b>sehr vorsichtig sein<\/b>, denn ein direkter Zugriff auf den Prompt des Servers bietet nat\u00fcrlich gef\u00e4hrliche Angriffsm\u00f6glichkeiten. Daher sollte man doppelt und dreifach sicher gehen, dass Benutzer der Website keinen sch\u00e4dlichen Code \u00fcber die verwendeten Variablen einschleusen k\u00f6nnen.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Dieser Beitrag erkl\u00e4rt wie man in Ruby on Rails externe Scripte, wie zum Beispiel PHP, ausf\u00fchren und ihre Ergebnisse weiter verarbeiten kann.<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[84,36,3],"tags":[90,94,93,92,86,87,91],"_links":{"self":[{"href":"https:\/\/hjacob.com\/blog\/wp-json\/wp\/v2\/posts\/251"}],"collection":[{"href":"https:\/\/hjacob.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/hjacob.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/hjacob.com\/blog\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/hjacob.com\/blog\/wp-json\/wp\/v2\/comments?post=251"}],"version-history":[{"count":7,"href":"https:\/\/hjacob.com\/blog\/wp-json\/wp\/v2\/posts\/251\/revisions"}],"predecessor-version":[{"id":288,"href":"https:\/\/hjacob.com\/blog\/wp-json\/wp\/v2\/posts\/251\/revisions\/288"}],"wp:attachment":[{"href":"https:\/\/hjacob.com\/blog\/wp-json\/wp\/v2\/media?parent=251"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/hjacob.com\/blog\/wp-json\/wp\/v2\/categories?post=251"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/hjacob.com\/blog\/wp-json\/wp\/v2\/tags?post=251"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}