У меня есть php-скрипт, который загружает композитор.phar.
После его загрузки я запускаю exec()
для установки пакетов.
Структура папок
--ROOT --public --composer.josn
Однако, когда я бегу
exec('php composer.phar install -d ' . dirname(__DIR__), $out, $return);
Я получаю вывод:
array(5) { [0]=> string(39) "All settings correct for using Composer" [1]=> string(14) "Downloading..." [2]=> string(0) "" [3]=> string(80) "Composer successfully installed to: /var/www/projects/funny/public/composer.phar" [4]=> string(25) "Use it: php composer.phar" }
И пакеты поставщиков не установлены.
Просто быть чистым. ФАР- архив уже загружен в этот момент, так что он загружается сейчас? Также размер загружаемого phar идет от 200k до 900k после запуска этой команды.
Вот полный код для загрузки и установки:
$composer_path = __DIR__ . '/composer.phar'; $ch = curl_init(); $fh = fopen($composer_path, 'x'); curl_setopt_array($ch, array( CURLOPT_URL => 'https://getcomposer.org/installer', CURLOPT_RETURNTRANSFER => true, CURLOPT_FOLLOWLOCATION => true, CURLOPT_FILE => $fh )); $output = curl_exec($ch); curl_close($ch); fclose($fh); exec('php composer.phar install -d ' . dirname(__DIR__), $out, $return);
Вышеупомянутый код запускается из файла в общедоступном
Вот полный код для загрузки и установки:
Этот код загружает Composer INSTALLER, но не сам Composer! Если вы запустите эту загрузку, вы выполните установщик, который пытается загрузить Composer. Вы не можете использовать установщик для загрузки зависимостей Composer.
Что такое -d на самом деле? Это не параметр, который содержится в документации для композитора. Я предполагаю, что это интерпретируется как какой-то флагом сухого пробега, и, следовательно, на него не влияют никакие файлы. Попробуйте сменить каталог на каталог, который вы хотите исполнить, и затем выполните его без -d.
например:
exec('cd '.dirname(__DIR__).' && php '.$composer_path.' install', $out, $return);