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.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Haben, öffnen Sie die PHP -, Ruby-oder Python-Skript via
proc_open
, Rohrleitungen den HTML-Code in STDIN in das Skript. Die Ruby - /Python-Skript liest und verarbeitet die Daten und gibt ihn über STDOUT zurück an das PHP-Skript wird anschließend beendet. Dies ist ein gemeinsamer Weg, Dinge zu tun, die überpopen
-Funktionen in Perl -, Ruby-oder Python-und ist nett, weil es gibt Ihnen Zugriff auf STDERR, falls etwas bläst Brocken und erfordert keine temp-Dateien, aber es ist ein bisschen komplexer.Alternative Möglichkeiten, es zu tun sein könnte, schreiben Sie die Daten aus PHP in eine temporäre Datei, dann mit
system
,exec
, oder etwas ähnliches zu nennen, die Ruby - /Python-Skript zu öffnen und zu verarbeiten, und drucken Sie die Ausgabe mit Ihrer STDOUT.EDIT:
Sehen @Jonke Antwort für "Best-practices mit STDIN in Ruby?" sind Beispiele, wie einfach es ist, STDIN Lesen und nach STDOUT schreiben mit Ruby. "Wie haben Sie von stdin Lesen, in python" hat einige gute Beispiele für diese Sprache.
Dies ist ein einfaches Beispiel zeigt, wie Aufruf eines Ruby-Skripts, und übergeben Sie einen string, um es über PHP STDIN pipe, und Lesen Sie den Ruby-Skripts an STDOUT:
Speichern Sie diese als "test.php":
Speichern Sie diese als "test.rb":
Läuft das PHP-script gibt:
Das PHP-Skript öffnet den Ruby-interpreter öffnet den Ruby-Skript. PHP sendet dann "Hallo Welt" zu. Ruby schließt die empfangene text in bold-tags, und gibt es, die ist gefangen von PHP, und dann ausgegeben. Es gibt keine temp-Dateien, nichts ging auf der Kommando-Zeile, könnte man z.B. an eine MENGE von Daten, wenn nötig-sein, und es wäre ziemlich schnell. Python oder Perl könnte leicht verwendet werden, anstelle von Ruby.
EDIT:
Wenn Sie haben:
als Beispiel-code, dann könnte man beginnen, die Entwicklung eines Ruby-Lösung mit:
vorausgesetzt, Sie haben bereits heruntergeladen, der HTML2Markdown code und es in das aktuelle Verzeichnis und ausführen von Ruby 1.9.2.
command returned 1
", weil irgendetwas nicht richtig gemacht. Versuchen Sieecho 'foo' | ruby test.rb
aus dem gleichen Verzeichnis, in dem Sie gespeichert haben die "test.rb" - Datei. Sie sollten "<b>foo</b>
".In Python, PHP übergeben, der var als ein command line argument, es bekommen
sys.argv
(die Liste der Kommandozeilen-Argumente übergeben Python), und dann haben Sie Python-print die Ausgabe, die PHP dann Echos. Beispiel:PHP:
Sollte das Verfahren im Grunde das gleiche in Ruby.
html2text.php
denn es hat besseres design, bessere performance und weniger Ausnahmefälle."import html2text; import sys; for line in sys.stdin: t = line; print html2text(html)
Verwenden Sie eine variable in der Ruby-code, und übergeben Sie Sie als argument an die Ruby-script aus der PHP-code. Dann haben die Ruby-Skript zurückkehren die bearbeiteten code in die Standardausgabe, welche PHP Lesen kann.
Ich denke deine Frage ist falsch. Ihr problem ist, wie die Konvertierung von HTML nach Markdown. Bin ich im Recht?
Versuchen, diese http://milianw.de/projects/markdownify/ ich denke, es könnte dir helfen =)
Andere sehr seltsame Vorgehensweise wird sein, wie die, die ich verwendet.
Nicht empfohlen, aber das wird sicher arbeiten.