2009-03-16 14 views
2

Ich bin in letzter Zeit in zwei Situationen gelaufen, in denen ich entschieden habe, die Befehlszeile für etwas zu verwenden, anstatt die PHP-Bibliothek. Zum Beispiel in PHP tun dies:PHP-Bibliothek oder Befehlszeile?

 
`curl http://someplace.com` 

statt dessen:

 
$ch = curl_init(); 
curl_setopt($ch, CURLOPT_URL, "http://www.example.com/"); 
curl_setopt($ch, CURLOPT_HEADER, 0); 
curl_exec($ch); 
curl_close($ch); 

Die andere Situation ImageMagicks Befehlszeilenschnittstelle verwendet, statt der PHP-Schnittstelle.

Einige Leute, die ich gesprochen habe zu denken, dass die Verwendung der Bibliotheken besser ist. Einige sagen, besser schneller, andere sagen, sicherer, usw.

Was ist Ihre Meinung? Was sind die Vorteile bei der Verwendung von einem über den anderen?

ich einen Nutzen wissen, ist, dass ich eine Zeile Code nur statt dessen von 5.

Antwort

5

ich immer die Bibliotheken verwenden würde:

  1. Keine Notwendigkeit, zweimal Gabel (einmal für die Unterschale und eine andere für das Programm, das Sie laufen lassen) - daher schneller

  2. Keine Notwendigkeit, über Flucht Befehlszeilenargumente zu sorgen, die Sicherheit

hilft

Wenn die Anzahl der Codezeilen ein Problem ist, schreiben Sie diese fünf Zeilen einmal in eine Funktion und rufen Sie diese Funktion dann auf, wenn Sie sie benötigen.

2

Die Ausführung von Anwendungen ist sowohl ein potentiell gefährlicher als auch fast immer kostspieliger Vorgang. Sie müssen unter anderem jeden Parameter, den Sie an das Programm übergeben, ordnungsgemäß umgehen.

Die Kosten für einen neuen Prozess zu schaffen sind auch weit über eine einfache Funktion in einem vorhandenen Aufruf.

Während das, was Sie tun jetzt gut arbeiten kann, wird es nicht einmal Ihre Anwendung hat mehrere tausend gleichzeitige Benutzer. (Sie sind für die Planung, nicht wahr? :))

1

Der Trade-off einen Kommandozeilenaufruf zwischen der Verwendung und eine Bibliothek verwendet, ist Geschwindigkeit Ihrer Anwendung und Geschwindigkeit des Computers Ihre Anwendung läuft.

Jede Zeit machen Sie einen Kommandozeilenaufruf wie das, PHP, ein Verfahren zur Gabel hat (zwei tatsächlich, die Shell und dann der Befehl, den Sie ausführen möchten). Dies bedeutet, dass Ihr Computer eine andere Anwendung starten muss. Dies ist eine teure Sache, die viele Systemressourcen verschlingt. Denken Sie darüber nach, was passiert, wenn Sie (oder Ihr Startvorgang) versuchen, zu viele Programme gleichzeitig auf Ihrem Computer zu starten.

Wenn Sie eine Bibliothek verwenden, müssen keine Prozesse gespalten werden. PHP selbst erledigt die Arbeit, die andere Anwendungen tun würden.

Das heißt, ich habe eine Menge von Produktions-Web-Anwendungen, die mit dem Aufruf von Kommandozeilen-Anwendungen, die nicht verfügbar sind über PHP-Bibliotheken erhalten. Wenn es sich um einen wenig befahrenen Teil einer Anwendung oder um eine Seite handelt, die nicht oft genug getroffen wird, ist es möglich, dass Sie damit durchkommen, aber Sie kaufen sich eine Welt voller Schmerzen, wenn es Zeit für die Skalierung ist.

Es gibt auch Sicherheit zu berücksichtigen.Wenn Sie einen Befehl von PHP wie das ausführen, wenn Sie Variablen verwenden die Befehlsfolge aufzubauen, riskieren Sie so etwas wie

;rm -rf/

in Ihrem Befehl injiziert wird, was schlecht wäre (rm -rf/wird lösche dein gesamtes Dateisystem). Ja, Sie können Ihre Eingabevariablen umgehen, um damit umzugehen, aber fragen Sie jeden erfahrenen PHP-Entwickler, wie Hand-Escape-SQL-Abfragen ausgearbeitet werden.

Also, kurz gesagt, Sie können wahrscheinlich damit durchkommen, aber es ist keine Best Practice und Sie kaufen sich eine Last von Schmerzen in der Zukunft, wenn das S --- den Fan trifft.

Verwandte Themen