Как передать аргумент методу 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.