Wie zum ausführen von Ruby - /Python-Skripts in PHP übergeben und empfangen von Parametern?

Ich brauchen, um in entsprechende HTML-Markdown-strukturierten text.

OBS.: Schnelle und saubere Weg dies zu tun mit PHP & Python.

So, ich bin Programmierung in PHP einige Leute gibt Markdownify um die Arbeit zu tun, aber leider ist der code nicht aktualisiert wird und in der Tat es nicht funktioniert. Bei sourceforge.net/projects/markdownify es ist ein "HINWEIS: nicht unterstützt - Sie pflegen wollen, ist dieses Projekt? Kontaktieren Sie mich! Markdownify ist ein HTML-zu-Markdown-Konverter in PHP geschrieben. Sehen es als den Nachfolger html2text.php da hat es bessere Designs, bessere Leistung und weniger Ausnahmefälle."

Von dem, was ich entdecken konnte, habe ich nur zwei gute Möglichkeiten:

  • Python: Aaron Swartz ist html2text.py

  • Ruby: Singpolyma ist html2markdown.rb, basierend auf Nokogiri

So, von PHP, muss ich übergeben Sie die HTML-code, rufen Sie die Ruby - /Python-Skript und die Ausgabe zu empfangen zurück.

(Übrigens, ein folk-machte eine ähnliche Frage hier ("wie nennen ruby-Skript von php?") aber mit praktisch keine Informationen zu meinem Fall).

Folgenden der Zinn-Mann-Spitze (unten), bekam ich diesen:

PHP-code:

$t='<p><b>Hello</b><i>world!</i></p>';
$scaped=preg_quote($t,"/");
$program='python html2md.py';

//exec($program.' '.$scaped,$n); print_r($n); exit; //Works!!!

$input=$t;

$descriptorspec=array(
   array('pipe','r'),//stdin is a pipe that the child will read from
   array('pipe','w'),//stdout is a pipe that the child will write to
   array('file','./error-output.txt','a')//stderr is a file to write to
);

$process=proc_open($program,$descriptorspec,$pipes);

if(is_resource($process)){
    fwrite($pipes[0],$input);
    fclose($pipes[0]);
    $r=stream_get_contents($pipes[1]);
    fclose($pipes[1]);
    $return_value=proc_close($process);
    echo "command returned $return_value\n";
    print_r($pipes);
    print_r($r);
}

Python-code:

#! /usr/bin/env python
import html2text
import sys
print html2text.html2text(sys.argv[1])
#print "Hi!" #works!!!

Mit den oben genannten ich bin geting dieses:

Befehl zurückgegeben, 1
Array
(
[0] => Resource id #17
Eins => Resource id #18
)

Und die "error-output.txt" die Datei sagt:

Traceback (most recent call last):
Datei "html2md.py", line 5, in
drucken html2text.html2text(sys.argvEins)
IndexError: list index out of range

Irgendwelche Ideen???


Ruby-code (noch beeing analysiert)

#!/usr/bin/env ruby
require_relative 'html2markdown'
puts HTML2Markdown.new("<h1>#{ ARGF.read }</h1>").to_s

Nur für die Akten, ich habe versucht, bevor zu verwenden, das PHP die meisten einfach "exec()" aber ich habe einige problemas mit einigen Sonderzeichen sehr Häufig, um HTML-Sprache.

PHP-code:

echo exec('./hi.rb');
echo exec('./hi.py');

Ruby-code:

#!/usr/bin/ruby
puts "Hello World!"

Python-code:

#!usr/bin/python
import sys
print sys.argv[1]

Beide funktionieren gut. Aber wenn der string ein wenig komplizierter:

$h='<p><b>Hello</b><i>world!</i></p>';
echo exec("python hi.py $h");

Es funktionierte nicht bei allen.

Das ist, weil die html-string benötigt, um seine spezielle Zeichen scaped. Ich habe es mit dieser:

$t='<p><b>Hello</b><i>world!</i></p>';
$scaped=preg_quote($t,"/");

Jetzt funktioniert es wie ich schon sagte hier.

Ich bin runnig:
Fedora 14
ruby 1.8.7
Python 2.7
perl-5.12.2
PHP 5.3.4
nginx 0.8.53

  • mögliche Duplikate von MVW-markdown-editor - HTML-zu-Markdown-Konvertierung schlägt Markdownify konvertieren von HTML nach Markdown mit PHP.
  • Sie diskutieren verschiedene Dinge, die auf "WMD markdown-editor - HTML-zu-Markdown-Konvertierung", obwohl Sie in der Tat versucht, Sie zu aktivieren HTML in Markdown. Beachten Sie auch, dass das Thema ist noch immer nicht gelöst ist und dass es keinen guten PHP-Programm, das den job tun. "Markdownify" erwähnt wird, aber eigentlich das Projekt von dem Autor und der code funktioniert nicht.
  • Versuchen, übergeben Sie die Zeichenfolge geändert werden, auf der Befehl-Linie ist eine sehr fragile Lösung und kann leicht brechen.
  • Wenn es irgendeine bessere Möglichkeit, dies zu tun durch die PHP "exec()", dann Stimme ich mit Ihnen überein, es ist keine Lösung.
InformationsquelleAutor Roger | 2011-01-06
Schreibe einen Kommentar