Как передать аргумент методу script как GET?
У меня есть эта папка-структура:
\out
\MakeAvatar.php
\root
\include
\Calculator.php
\img
\avatar
Что MakeAvatar.php
? Это script, который получает параметр (например, 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 и передаю этот аргумент, как это, тогда if works:
... file_get_contents("http://example.com/MakeAvatar.php?id=$id")
Но, как вы видите, MakeAatar.php
вышел из строя, и я не могу использовать http
. Итак, как я могу передать аргумент без http
?
Ответы
Ответ 1
Ваш file_get_contents
фактически читает содержимое файла, а не выполняет его.
Вы либо должны include
сохранить свой файл из Calculator.php
, либо выставить его на HTTP-сервер и выполнить локальный HTTP-запрос (например, file_get_contents('http://localhost/path/to/your/MakeAvatar.php')
)
Я бы рекомендовал обернуть вашу важную логику в файле MakeAvatar
в функцию, затем include
выполнить ее и выполнить функцию.
Ответ 2
Если ваш общедоступный каталог веб-сервера является корневым, то вы должны сделать точку входа, например. root/avatar.php
. Позвольте называть его контроллером. В контроллере вы должны использовать класс (пусть называют его моделью), который имеет метод генерации аватаров.
Таким образом, ваша структура может выглядеть следующим образом:
корень /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
.