Предложение
Немного поздно, но, несмотря на то, что это обходной путь, это решает требование, так как оно работает просто отлично:
<?
function get_sys_usr()
{
$unique_name = uniqid(); // not-so-unique id
$native_path = "./temp/$unique_name.php";
$public_path = "http://example.com/temp/$unique_name.php";
$php_content = "<? echo get_current_user(); ?>";
$process_usr = "apache"; // fall-back
if (is_readable("./temp") && is_writable("./temp"))
{
file_put_contents($native_path,$php_content);
$process_usr = trim(file_get_contents($public_path));
unlink($native_path);
}
return $process_usr;
}
echo get_sys_usr(); // www-data
?>
Описание
Выделение кода выше не является точным, скопируйте и вставьте его в свой любимый редактор и просмотрите как код PHP, либо сохраните и протестируйте его самостоятельно.
Как вы, вероятно, знаете, get_current_user()
возвращает владельца "текущего запущенного скрипта" - поэтому, если вы не "забросили" скрипт на сервере пользователю веб-сервера, он, скорее всего, будет "никто" или если пользователь-разработчик существует в той же ОС, он будет отображать это имя пользователя.
Чтобы обойти это, мы создаем файл с текущим запущенным процессом. Если вы просто require()
это в текущий запущенный скрипт, он вернет то же самое, что и родительский скрипт, как упомянуто; поэтому нам нужно выполнить его как отдельный запрос, чтобы он вступил в силу.
Процесс потока
Чтобы сделать это эффективным, рассмотрите возможность запуска шаблона проектирования, который включает в себя «режим времени выполнения», поэтому, когда сервер находится в «режиме разработки или тестовом режиме», только тогда он может запустить эту функцию и сохранить свои выходные данные где-нибудь во включении, - или просто текст или база данных, или что-то еще.
Конечно, вы можете изменить некоторые особенности кода выше, если хотите сделать его более динамичным, но логика такова:
- определить уникальную ссылку для ограничения помех другим пользователям
- определить локальный путь к файлу для записи временного файла
- определить публичный URL / путь для запуска этого файла в своем собственном процессе
- написать временный php-файл, который выводит имя владельца скрипта
- получить вывод этого скрипта, сделав запрос к нему
- удалите файл, так как он больше не нужен, или оставьте его, если хотите
- возвращает результат запроса в качестве возвращаемого значения функции