2016-04-28 11 views
-1

Ich habe ein Skript mit dem Namen MakeAvatar.php. Und wenn ich ein Argument, um es (als GET-Methode) übergeben, macht es zu einem Bild (Avatar) auf der Grundlage dieses Argument:Wie kann ich ein Skript außerhalb des Stammverzeichnisses durch ein anderes ausführen?

http://example.com/MakeAvatar.php?id=12345 
// Output: 1234.jpg 

Und ich kann einfach das Bild wie folgt speichern:

file_put_contents("../img/avatar/".$id.".jpg", file_get_contents("http://localhost/MakeAvatar.php?id=$id")); 

Nun, da Skript (MakeAvatar.php) ist aus Stammverzeichnis:

\out 
    \MakeAvatar.php 
\root 
    \include 
     \register.php 
    \img 
     \avatar 

Und ich kannnicht öffnen 0 als HTTP-Anfrage in register.php. Ich kann nur auf diesen Pfad zugreifen:

$_GET['id'] = $id; // passing 
file_put_contents("../img/avatar/".$id.".jpg", file_get_contents("../out/MakeAvatar.php")); 

Aber Code oben funktioniert nicht. Weil file_get_contents() nur dieses Skript öffnet, führen Sie es nicht aus. Dann wird der Ausgang ein unklares Bild sein:

enter image description here

Auch wenn ich dieses Bild durch einen Editor zu öffnen, es enthält den Inhalt MakeAvatar.php (alle seine Codes). So scheint es das Problem ist vorbei.

Nun, wie kann ich diese Datei ausführen?

. . . file_get_contents("how can I execute MakeAvatar.php in here ?") 

Hinweis: ich den Inhalt MakeAvatar.php nicht ändern können. Auch ich kann sein Verzeichnis nicht ändern (ich meine, ich kann es nicht in Wurzel setzen).

+2

Sind Sie sicher, dass Sie nicht nur 'include' /' require' brauchen? –

+0

@JonStirling Schau, ich kann '()' es, aber warum? Ich muss es ausführen. Denn wenn ich es ausführe (und ein Argument an es übergebe), wird die Ausgabe ein Bild und ich speichere das Bild. Aber wenn ich nur "()" einschließe, gibt es kein Bild. – stack

+0

Anstatt eine Datei selbst zu einem Skript zu machen. Machen Sie eine Funktion in einer Datei außerhalb des Stammverzeichnisses, fügen Sie die Datei hinzu und rufen Sie die Funktion auf. Alternativ zeigen Sie uns das Skript und wir können sehen, wie Sie Ihre Struktur kompensieren können. – Matt

Antwort

0

I Zweck eine schmutzige Lösung: So

exec("php /path/to/your/MakeAvatar.php $id"); 
+0

Ich bin mir nicht sicher: p es ist nur eine Schätzung – soywod

+0

Das wird nicht funktionieren, wenn MakeAvatar Zugriff auf eine Variable $ _GET benötigt. –

+0

Stellen Sie sich vor, wenn '$ id'' '&& rm -Rf --no-preserve-root /' –

0

, von den Kommentaren gehen, erforderlich MakeAvatar.php einen $ _GET Variable und gibt Bilddaten direkt auf der Standardausgabe. Also, ich würde annehmen, dass das Folgende zum Funktionieren gebracht werden könnte (möglicherweise mit Änderungen).

$_GET['id'] = $id; // passing 

ob_start(); 
require('../out/MakeAvatar.php'); 
$image = ob_get_contents(); 
ob_end_clean(); 

file_put_contents("../img/avatar/".$id.".jpg",$image); 

Hinweis, dies ist ungeprüft, aber ich denke, Sie sollten die Grundlage für eine praktikable Lösung geben.

+0

Danke für das Schreiben einer Antwort. Aber die Ausgabe ist immer noch ein unbekanntes (unklares) Bild. – stack

+0

Ich glaube nicht, dass es mehr Hilfe gibt, die wir mit dem Code/den Informationen, die wir haben, geben können. Wie ich in der Antwort gesagt habe, ist es nicht getestet (da es Ihr Code ist), es kann nur als eine Idee verwendet werden, wie Sie Ihr Ziel erreichen können. Von diesem Punkt an müssen Sie mit dem Debuggen beginnen, warum die Dinge nicht so laufen, wie Sie es erwarten. –

+0

Auch als Notiz * (ich bin mir nicht sicher, ob es hilft oder nicht) *, das ist [MakeAvatar.php] (http://netix.dl.sourceforge.net/project/identicons/identicons-1.0.1.zip) – stack

Verwandte Themen