如何通过另一个脚本在根目录之外执行脚本?

时间:2016-04-28 15:44:34

标签: php

我有一个名为MakeAvatar.php的脚本。当我向它传递一个参数(作为GET方法)时,它根据该参数创建一个图像(头像):

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

我可以简单地保存这样的图像:

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

现在脚本(MakeAvatar.php)不在根目录中:

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

我无法将MakeAvatar作为http请求打开到register.php。我只能通过这条路径访问它:

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

但上面的代码不起作用。因为file_get_contents()只打开该脚本,而不是执行它。然后输出将是一个不清晰的图像:

enter image description here

当我通过编辑器打开该图像时,它包含MakeAvatar.php(所有代码)的内容。所以似乎问题是传递

那么,我该如何执行该文件?

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

注意:我无法更改MakeAvatar.php的内容。另外我无法更改其目录(我的意思是我不能把它放到root中)

2 个答案:

答案 0 :(得分:0)

我的目的是一个肮脏的解决方案:

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

答案 1 :(得分:0)

因此,根据评论,MakeAvatar.php需要一个$ _GET变量,并将图像数据直接输出到stdOut。所以,我认为以下内容可以使用(可能需要修改)。

$_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);

请注意,这是未经测试的,但我认为应该为您提供可行的解决方案的基础。