Как в PHP (CLI) создать массив имён, переданных через аргументы командной строки?

Ответ

Да, при запуске PHP-скрипта из командной строки (CLI) можно передавать аргументы и парсить их в массив. Суперглобальный массив $_GET в CLI не работает, но есть несколько других способов.

Способ 1: Использование массива $argv Аргументы автоматически попадают в глобальный массив $argv. $argv[0] — это имя самого скрипта.

// Запуск: php script.php Alice Bob Charlie
// script.php
$names = array_slice($argv, 1); // Берём все элементы, начиная с индекса 1
print_r($names);
// Вывод: Array ( [0] => Alice [1] => Bob [2] => Charlie )

Способ 2: Использование функции getopt() для сложных параметров Позволяет парсить именованные опции (например, --names).

// Запуск: php script.php --names=John,Jane,Alex
// script.php
$options = getopt('', ['names:']); // ':' означает, что опция требует значения
if (isset($options['names'])) {
    $names = explode(',', $options['names']); // Разбиваем строку по запятой
    print_r($names);
    // Вывод: Array ( [0] => John [1] => Jane [2] => Alex )
}

Способ 3: Чтение из стандартного ввода (STDIN) Полезно, если имена передаются построчно или через пайп.

// Запуск: echo -e "AlicenBob" | php script.php
// script.php
$names = [];
while (($line = fgets(STDIN)) !== false) {
    $names[] = trim($line); // Убираем символы перевода строки
}
print_r($names);

Ключевое отличие от веб-режима: В CLI нет автоматического парсинга query-строки (?name=value). Всё управление аргументами ложится на разработчика с использованием $argv, getopt() или STDIN.

Ответ 18+ 🔞

Э, слушай, а ведь и правда, народ часто тупит с этим. Ну, типа, на веб-сервере всё ясно — прилетело в $_GET или $_POST, и дальше хоть трава не расти. А вот когда пишешь скрипт для консоли, чтобы он, например, по крону запускался, тут уже начинается ёперный театр. Люди пытаются ?name=value прилепить и охуевают, когда ничего не работает. Ну, блядь, так не пойдёт.

Вот смотри, как это на самом деле делается, тут всё проще, чем кажется. Главное — запомнить, что в CLI-режиме суперглобальный $_GET — это просто пизда рулю, он пустой и всегда будет пустым. Вместо него есть свои, более прямые инструменты.

Способ первый, самый простой — массив $argv. Представь, ты вызываешь скрипт. PHP автоматом складывает все твои слова после команды в этот массив. Первый элемент ($argv[0]) — это всегда имя самого скрипта, такой себе эгоист. А уже всё, что ты написал дальше — это твои аргументы.

// Запускаешь так: php script.php Alice Bob Charlie
// А в script.php пишешь:
$names = array_slice($argv, 1); // Отрезаем первый элемент, этот манда с ушами
print_r($names);
// И вуаля: Array ( [0] => Alice [1] => Bob [2] => Charlie )

Вот и всё, никакой магии. Просто взял и отрезал ненужное. Доверия ебать ноль к $argv[0] — он тебе не друг.

Способ второй, для любителей красоты — функция getopt(). Это когда тебе надо не просто слова через пробел кидать, а что-то посерьёзнее, с ключами, типа --user=admin. Вот тут getopt() — твой лучший друг.

// Запуск: php script.php --names=John,Jane,Alex
// Внутри script.php:
$options = getopt('', ['names:']); // Двоеточие тут — это приказ: "Жду значение, сука!"
if (isset($options['names'])) {
    $names = explode(',', $options['names']); // Бах — и разбил строку по запятым
    print_r($names);
    // Получаешь: Array ( [0] => John [1] => Jane [2] => Alex )
}

Очень удобно для скриптов, где параметров овердохуища. Можно и короткие флаги делать (-n), и обязательные, и необязательные — полный картель.

Способ третий, для ценителей пайпов — чтение из STDIN. Это классика жанра, когда данные прут потоком, например, из другой команды. Сиди себе и читай построчно, пока не накроется медным тазом ввод.

// Запуск: echo -e "AlicenBob" | php script.php
// Или: cat users.txt | php script.php
// А в script.php:
$names = [];
while (($line = fgets(STDIN)) !== false) { // Читаем, пока не кончится
    $names[] = trim($line); // trim — чтобы обрезать переводы строк, эти назойливые пидарасы шерстяные
}
print_r($names);

Тихий, спокойный способ. Никакой суеты, просто жуёшь то, что дают.

Так что, чувак, запомни главное: в консольном мире ты сам себе хозяин. Никакой автоматической магии с query-строками. Всё парсишь сам, с помощью $argv, getopt() или через STDIN. Выбирай инструмент по задаче и не пытайся толкать хуй в пальто, используя веб-методы там, где они не работают.