我有这个文件夹结构:
\out
\MakeAvatar.php
\root
\include
\Calculator.php
\img
\avatar
什么是 MakeAvatar.php
?这是一个获取参数(如id)的脚本,并根据该参数创建一个头像。现在我需要将一个参数($id
)从Calculator.php
传递给MakeAvatar.php
。我怎么能这样做?
这是我的代码:
$_GET['id'] = $id; // passing
file_put_contents("../img/avatar/".$id.".jpg", file_get_contents("../out/MakeAvatar.php"));
但它不起作用。我的意思是结果是未知图像(不清楚)。
当我通过编辑器打开该图像时,它包含MakeAvatar.php
(其所有代码)的内容。所以似乎问题是传递。
注1:如果我将MakeAvatar.php
放入root并传递这样的参数,那么如果有效:
... file_get_contents("http://example.com/MakeAvatar.php?id=$id")
但正如您所见,MakeAatar.php
已超出root权限,我无法使用http
。那么如何在没有http
的情况下传递参数?
答案 0 :(得分:0)
您的file_get_contents
实际上正在阅读文件内容,而不是正在执行。
您必须include
来自Calculator.php
的{{1}}文件或将其公开给HTTP服务器并执行本地http请求(例如file_get_contents('http://localhost/path/to/your/MakeAvatar.php')
}
我建议将MakeAvatar
文件中的重要逻辑包装到一个函数中,然后include
并执行该函数。
答案 1 :(得分:0)
如果您的公共Web服务器目录是root,那么您应该创建一个入口点,例如root/avatar.php
。我们称之为 controller 。在控制器中,你应该使用一个类(让我们称之为模型),它有一个生成头像的方法。
因此,您的结构可能如下所示:
<强>根/ avatar.php 强>
<?php
require_once __DIR__ . '/../out/MakeAvatar.php';
MakeAvatar::printPng($_GET);
<强>出/ MakeAvatar.php 强>
<?php
class MakeAvatar {
public static function printPng(array $input) {
$id = $input['id'];
echo '... PNG data for $id here...';
}
}
另外,我将模型保存在classes
或lib
等目录中;控制器 - 在public/something
中,以及不同目录中的视图,例如templates
。