Как открыть автозагрузку в Windows

Обновлено: 03.07.2024

Для нашего основного введения в использование мы установим monolog/monolog , библиотеку ведения журнала. Если вы еще не установили Composer, обратитесь к главе Введение.

Примечание: для простоты в этом введении предполагается, что вы выполнили локальную установку Composer.

Первое, что вы указываете в composer.json, — это ключ require. Вы сообщаете Composer, от каких пакетов зависит ваш проект.

Как видите, require принимает объект, который сопоставляет имена пакетов (например, monolog/monolog ) с ограничениями версии (например, 1.0.* ).

Имя пакета состоит из названия поставщика и названия проекта. Часто они будут идентичными — имя поставщика существует только для предотвращения конфликтов имен. Например, это позволит двум разным людям создать библиотеку с именем json. Один из них может называться igorw/json, а другой — seldaek/json .

Подробнее о публикации пакетов и именовании пакетов. (Обратите внимание, что вы также можете указать «пакеты платформы» в качестве зависимостей, что позволит вам требовать определенных версий серверного программного обеспечения. См. пакеты платформы ниже.)

В нашем примере мы запрашиваем пакет Monolog с ограничением версии 2.0.* . Это означает любую версию в ветке разработки 2.0 или любую версию, которая больше или равна 2.0 и меньше 2.1 ( >=2.0 ).

Пожалуйста, ознакомьтесь с версиями, чтобы получить более подробную информацию о версиях, о том, как версии соотносятся друг с другом, и об ограничениях версий.

Чтобы изначально установить определенные зависимости для вашего проекта, вы должны запустить команду обновления.

Это заставит Composer делать две вещи:

  • Он разрешает все зависимости, перечисленные в вашем файле composer.json, и записывает все пакеты и их точные версии в файл composer.lock, привязывая проект к этим конкретным версиям. Вы должны зафиксировать файл composer.lock в репозитории вашего проекта, чтобы все люди, работающие над проектом, были привязаны к одним и тем же версиям зависимостей (подробнее ниже). Это основная роль команды обновления.
  • Затем он неявно запускает команду установки. Это загрузит файлы зависимостей в каталог поставщика в вашем проекте. (Каталог поставщика — это обычное место для всего стороннего кода в проекте). В нашем примере выше вы получите исходные файлы Monolog в vendor/monolog/monolog/ . Поскольку Monolog зависит от psr/log , файлы этого пакета также можно найти внутри vendor/ .

Совет: если вы используете git для своего проекта, вы, вероятно, захотите добавить поставщика в свой .gitignore . Вы действительно не хотите добавлять весь этот сторонний код в свой версионный репозиторий.

Передача этого файла в систему управления версиями важна, потому что это приведет к тому, что любой, кто настраивает проект, будет использовать те же версии зависимостей, что и вы. Ваш CI-сервер, производственные машины, другие разработчики в вашей команде, все и все работают на одних и тех же зависимостях, что снижает вероятность ошибок, затрагивающих только некоторые части развертывания. Даже если вы разрабатываете в одиночку, через шесть месяцев при переустановке проекта вы можете быть уверены, что установленные зависимости все еще работают, даже если с тех пор ваши зависимости выпустили много новых версий. (См. примечание ниже об использовании команды обновления.)

Примечание. Для библиотек нет необходимости фиксировать файл блокировки, см. также: Библиотеки — файл блокировки.

Если в папке проекта уже есть файл composer.lock, это означает, что либо вы выполнили команду обновления ранее, либо кто-то другой в проекте выполнил команду обновления и передал файл composer.lock в проект (что хорошо).

В любом случае запуск установки при наличии файла composer.lock разрешает и устанавливает все зависимости, которые вы указали в composer.json , но Composer использует точные версии, указанные в composer.lock, чтобы обеспечить согласованность версий пакетов для всех. работа над вашим проектом. В результате у вас будут все зависимости, запрошенные вашим файлом composer.json, но не все они могут быть в самых последних доступных версиях (некоторые из зависимостей, перечисленных в файле composer.lock, могли быть выпущены в более новых версиях с момента создания файла). ). Это сделано по замыслу и гарантирует, что ваш проект не сломается из-за неожиданных изменений в зависимостях.

Поэтому после извлечения новых изменений из вашего репозитория VCS рекомендуется запустить установку Composer, чтобы убедиться, что каталог поставщика синхронизирован с вашим файлом composer.lock.

Как упоминалось выше, файл composer.lock предотвращает автоматическое получение последних версий ваших зависимостей. Для обновления до последних версий используйте команду update. Это позволит получить последние совпадающие версии (в соответствии с вашим файлом composer.json) и обновить файл блокировки новыми версиями.

Примечание. Composer отобразит предупреждение при выполнении команды установки, если composer.lock не был обновлен после внесения изменений в composer.json, которые могут повлиять на разрешение зависимостей.

Если вы хотите установить, обновить или удалить только одну зависимость, вы можете явно указать ее в качестве аргумента:

Всем проектам с открытым исходным кодом, использующим Composer, рекомендуется публиковать свои пакеты на Packagist. Библиотека не обязательно должна находиться в Packagist, чтобы ее можно было использовать в Composer, но она позволяет быстрее обнаруживать и внедрять ее другими разработчиками.

В Composer есть пакеты платформы, которые представляют собой виртуальные пакеты для компонентов, установленных в системе, но фактически не устанавливаемых Composer. Сюда входят сам PHP, расширения PHP и некоторые системные библиотеки.

php представляет версию PHP пользователя, что позволяет применять ограничения, например. ^ 7.1 . Чтобы потребовать 64-битную версию php, вам может потребоваться пакет php-64bit.

hhvm представляет версию среды выполнения HHVM и позволяет применить ограничение, например, ^2.3 .

ext- позволяет вам требовать расширения PHP (включая основные расширения). Управление версиями здесь может быть довольно непоследовательным, поэтому часто рекомендуется установить ограничение на * . Пример имени пакета расширения: ext-gd .

lib- позволяет накладывать ограничения на версии библиотек, используемых PHP. Доступны следующие: curl , iconv , icu , libxml , openssl , pcre , uuid , xsl .

Вы можете использовать команду show --platform, чтобы получить список доступных локально пакетов платформы.

Для библиотек, в которых указана информация об автозагрузке, Composer создает файл vendor/autoload.php. Вы можете включить этот файл и начать использовать классы, предоставляемые этими библиотеками, без каких-либо дополнительных действий:

Вы даже можете добавить свой собственный код в автозагрузчик, добавив поле автозагрузки в composer.json .

Composer зарегистрирует автозагрузчик PSR-4 для пространства имен Acme.

Вы определяете сопоставление пространств имен с каталогами. Каталог src будет находиться в корне вашего проекта на том же уровне, что и каталог поставщика. Пример имени файла: src/Foo.php, содержащий класс Acme\Foo.

После добавления поля автозагрузки вам необходимо повторно запустить эту команду:

Эта команда повторно создаст файл vendor/autoload.php. Дополнительные сведения см. в разделе автозагрузки дампа.

Включение этого файла также вернет экземпляр автозагрузчика, поэтому вы можете сохранить возвращаемое значение вызова include в переменной и добавить дополнительные пространства имен. Это может быть полезно, например, для автоматической загрузки классов в тестовом наборе.

Помимо автозагрузки PSR-4, Composer также поддерживает автозагрузку PSR-0, classmap и файлов. Дополнительные сведения см. в справочнике по автозагрузке.

Примечание: Composer предоставляет собственный автозагрузчик. Если вы не хотите использовать его, вы можете включить файлы vendor/composer/autoload_*.php, которые возвращают ассоциативные массивы, позволяющие настроить собственный автозагрузчик.

Нашли опечатку? Что-то не так в этой документации? Разветвите и отредактируйте его!

Composer и весь контент на этом сайте выпущены под лицензией MIT.

Может быть причина, по которой вы хотите автоматически загружать программу или файлы для запуска при запуске Windows 10.

Вот инструкция.

Необходимое время: 1 минута.

Заставить программу или файл запускаться при запуске Windows

Для этого щелкните правой кнопкой мыши флаг меню "Пуск" и щелкните левой кнопкой мыши "Выполнить". Или используйте сочетание клавиш Windows Key & R.

Если ввести shell:startup в диалоговом окне «Выполнить», откроется папка «Автозагрузка» Windows. Пока оставьте эту папку открытой.

Найдите программу или файл, который вы хотите запустить автоматически. Щелкните правой кнопкой мыши программу или файл и выберите «Открыть расположение файла».

Щелкните правой кнопкой мыши значок файла, скопируйте. Перейдите в папку автозагрузки. Щелкните правой кнопкой мыши и вставьте.

Каждый раз при загрузке компьютера будет запускаться нужная программа. Чтобы удалить его из автозагрузки, просто повторите описанные выше шаги и удалите элемент из папки автозагрузки.

Видеоверсия

Вот видеоверсия этих инструкций.

Зачем добавлять программы в автозагрузку?

Обычно мы фокусируемся на удалении программ из автозапуска. Однако во многих случаях может потребоваться автозапуск определенных файлов или программ.

В основном для профессионального использования, такого как работа или бизнес. Это может быть полезно, если к вашей системе необходимо получить удаленный доступ через удаленный рабочий стол. Если у вас есть пакет программного обеспечения для бронирования или записи на прием, который вы хотите автоматически запускать при запуске системы, или если вы используете свой компьютер для мониторинга видеонаблюдения. Это может быть полезно для автозапуска, если система теряет питание в автоматическом режиме.

Это может быть полезно для автоматического запуска музыкальной программы, если у вас есть фоновая музыка или если вы используете компьютер для отображения рекламного видеоконтента, просто добавьте ярлык к видеофайлу или музыкальному плейлисту.

Другие методы автоматического запуска программ

Некоторые программные пакеты могут автоматически запускаться при запуске Windows. Обычно это делается в виде флажка в настройках или настройках самого программного обеспечения.

Я знаю, что эта проблема обсуждалась много раз, но для меня это другая проблема.

Действительно, эта ошибка

Предупреждение: require(vendor/autoload.php): не удалось открыть поток: нет такого файла или каталога в C:\xampp\htdocs\site_web\send_mail.php в строке 3

Неустранимая ошибка: require(): не удалось открыть требуемый 'vendor/autoload.php' (include_path='C:\xampp\php\PEAR') в C:\xampp\htdocs\site_web\send_mail.php в строке 3

появляется в начале моего кода из этой строки:

Итак, я предполагаю, что где-то на моем компьютере должен быть файл /vendor/autoload.php (я установил composer и запустил composer require phpmailer/phpmailer ).

но для меня папка syswow64 не имеет ничего общего с autoload.php, я не вижу, что мне здесь не хватает.


Это также может произойти, если у вас есть php artisan в файле composer.json в разделе скриптов перед установкой. Кажется, нужны файлы в папке поставщика для запуска режима обслуживания, который пока недоступен.

17 ответов 17

Чего вам не хватает, так это запуска composer install , который импортирует ваши пакеты и создаст папку vendor вместе со сценарием автозагрузки.

Убедитесь, что указан правильный относительный путь. Например, примеры скриптов в PHPMailer находятся в examples/ ниже корня проекта, поэтому правильный относительный путь для загрузки оттуда автозагрузчика композитора будет ../vendor/autoload.php .

Файл autoload.php, который вы нашли в C:\Windows\SysWOW64\vendor\autoload.php, скорее всего, является глобальной установкой композитора, куда вы обычно кладете такие вещи, как phpcs, phpunit, phpmd и т. д.

Composer update — это не то же самое и, вероятно, не то, что вы хотите использовать. Если ваш код протестирован с вашими текущими версиями пакетов, запуск обновления может привести к сбоям, которые могут потребовать дальнейшей работы и тестирования, поэтому не запускайте обновление, если у вас нет особой причины и вы точно не понимаете, что это значит. Чтобы уточнить — вам, вероятно, следует запускать обновление композитора только локально, а не на вашем сервере, поскольку это может привести к поломке приложений в рабочей среде.

Я часто слышу жалобы на то, что люди не могут использовать composer, потому что не могут запустить его на своем сервере (например, потому что он общий и у них нет доступа к командной оболочке). В этом случае вы можете по-прежнему использовать композитор: запустите его локально (среда, в которой нет таких ограничений) и загрузите сгенерированную локальную папку поставщика вместе со всеми другими вашими PHP-скриптами.

Запуск composer update также выполняет установку composer , и если у вас в данный момент нет папки vendor (нормально, если у вас есть свежая проверка проекта), то она будет создана, а также перезаписать любой файл composer.lock, который у вас уже есть, обновив версии пакетов, помеченные в нем, и это потенциально опасно.

Аналогичным образом, если у вас в данный момент нет файла composer.lock (например, если он не был зафиксирован в проекте), установка composer также эффективно выполняет обновление composer . Поэтому очень важно понимать разницу между ними, поскольку они определенно не взаимозаменяемы.

Также можно обновить отдельный пакет, назвав его, например:

Это приведет к повторному разрешению версии, указанной в файле composer.json, и установке ее в папку поставщика, а также обновлению файла composer.lock для соответствия. Это гораздо менее вероятно вызовет проблемы, чем общее обновление композитора, если вам просто нужно конкретное обновление для одного пакета.

Для библиотек нормально не включать собственный файл composer.lock; исправлять версии должны приложения, а не библиотеки, которые они используют. В результате ожидается, что разработчики библиотек будут поддерживать совместимость с более широким диапазоном хост-сред, чем это необходимо разработчикам приложений. Например, библиотека может быть совместима с Laravel 5, 6, 7 и 8, но приложению, использующему ее, может потребоваться Laravel 8 по другим причинам.

В Composer 2.0 устранены все оставшиеся несоответствия между результатами установки и обновления; если вы используете composer 1.x, вам обязательно нужно обновиться.

Как видно из приведенного ниже примера, автоматически сгенерированная Studio строка в файле vendor/autoload.php создает неверный путь к файлу (фактически использует смесь разделителей):

Это приводит к фатальной ошибке из-за сбоя запроса. Фатальная ошибка исчезнет, ​​как только все обратные косые черты будут заменены на прямые косые черты. Я использую Windows 10.

Текст был успешно обновлен, но возникли следующие ошибки:

franzliedke прокомментировал 21 сентября 2015 г.

Что-то вроде str_replace(['\\', '/'], DIRECTORY_SEPARATOR, $file) должно сработать, верно?

Комментарий Rjs37 от 21 сентября 2015 г.

franzliedke прокомментировал 21 сентября 2015 г.

Подождите секунду, какую версию вы используете? Я изменил это давно, чтобы редактировать файлы autoload_XXX.php вместо глобального файла vendor/autoload.php.

Обновите до dev-master . Скоро выложу новую версию.

Комментарий Rjs37 от 21 сентября 2015 г.

Отредактировано после того, как я только что прочитал ваш комментарий по другому вопросу.

Извините, я использовал последнюю версию. Просто попробовал вместо этого dev-master, я вижу, что он вносит некоторые изменения в файлы в vendor/composer, но он вообще не загружает мой пакет автоматически. О чем, кажется, вы уже знаете.

Поскольку мне нужно было быстрое исправление, я вернулся к последнему выпуску, так как я могу, по крайней мере, заставить эту версию работать так, как мне нужно (даже несмотря на то, что обновление композитора перезаписывает изменения — я предполагаю, что именно поэтому вы внесли изменения, которые вы описано).

Я использовал изменение, описанное в разделе "Избегайте повторяющихся зависимостей", чтобы правильно работать на моем локальном компьютере.

franzliedke прокомментировал 21 сентября 2015 г.

Хм, интересно. Доступен ли где-нибудь пакет, которым вы управляете с помощью Composer? Я хотел бы увидеть, почему он не работает. Используете ли вы опцию «файлы» в конфигурации автозагрузки Composer? Могу я увидеть ваш composer.json (тот, что из пакета)?

Комментарий Rjs37 от 21 сентября 2015 г.

Я предположил, что автозагрузка не работает из-за другой открытой проблемы. И нет, это частный пакет, который мы используем в качестве базы для нескольких сайтов.

Site/Project composer.json — это то, что Laravel 5.1 предоставил с зависимостями Laravel и PHP, замененными зависимостями для моего пакета.

прокомментировал kaidesu 27 сентября 2015 г.

Может подтвердить эту проблему и в Windows 10.

screenshot1

Комментарий Rjs37 от 21 октября 2015 г.

У меня было время поэкспериментировать на своем ноутбуке (тоже с Windows 10) и получить еще несколько наблюдений с помощью dev-master.

Мой хост-компьютер — Windows (и именно на нем я глобально установил студию), но я использую vagrant (homestead). Я не хотел глобально устанавливать студию в экземпляре vagrant, так как мне приходилось бы делать это каждый раз, когда я заново создаю экземпляр.

  • Команда загрузки не добавила мой пакет ни в один из файлов автозагрузки (возможно, потому, что это psr-0, а не psr-4). Он не изменил файл autoload_namespaces.php, кроме сгенерированного комментария.
  • Команда create (в качестве теста) изменила autoload_ps4.php, но создала смесь разделителей каталогов: C:\path\to\project/src
  • Путь является абсолютным путем Windows, тогда как другие относятся к каталогу поставщика и, следовательно, работают в экземпляре vagrant.
  • Composer update по-прежнему стирает изменения в обоих (пространствах имен и psr4) этих файлов. Есть ли способ избежать этого?

Если я вручную добавлю приведенное ниже в autoload_namespaces.php, то все будет работать так, как мне нужно, до следующего обновления композитора

Не уверен, почему студия не изменила файл пространств имен автоматически, но даже если бы это было так, у нас все еще была бы проблема между хост-машиной и бродячим экземпляром, и я не уверен, что это лучшее решение. Рекомендовать запрашивать студию в экземпляре?

franzliedke прокомментировал 21 октября 2015 г.

Рекомендовать требовать студию в экземпляре?

Пока да, сделайте это.

Я действительно должен убедиться, что не разрешаю константы __DIR__ в файлах автозагрузчика. Это должно решить эту проблему.

Обновление композитора по-прежнему стирает изменения в обоих (пространствах имен и psr4) этих файлов. Есть ли способ избежать этого?

Комментарий Rjs37 от 21 октября 2015 г.

Я был на dev-master, но поскольку я запускал обновление композитора в экземпляре, а в студии с хоста (мне неловко, лол), я не видел такого поведения.

Теперь, когда я установил и использую студию в экземпляре, я вижу, что студия выполняет дополнительные действия во время обновления композитора, и вижу, что она установила все подпакеты, но:

  • Я не имел в виду это. Мое ручное изменение autoload_namespace.php стирается при обновлении композитора. И Studio не добавляет туда мой пакет сам. Там останется только комментарий.
  • Мне такое поведение подпакетов не нужно. Они уже являются частью каталога поставщиков проекта. Вреда вроде нет, но мне нет необходимости устанавливать их дважды.

EDIT: На самом деле теперь, когда я установил студию в экземпляре. Одного ручного изменения недостаточно. Мне также нужно обновить пути к файлам в autoload_classmap.php. Должна ли Studio редактировать и этот файл?

Комментарий Rjs37 от 21 октября 2015 г.

Поскольку это проект Laravel (с моим пакетом в качестве зависимости), команда оптимизации php artisan в хуке post-update-cmd вызывает поведение, упомянутое в моем предыдущем редактировании. Он заполняет файл classmap ссылками на классы из проекта. Это означает, что мне нужно обновить эти ссылки на файлы.

Возможно, нужна post-update-cmd специально для студии, или у нас не может быть там команды оптимизации?

Хотя файл namespace.php не обновляется Studio, это отдельная проблема.

Комментарий Rjs37 от 30 октября 2015 г.

Я обнаружил, в чем моя главная проблема. Использование array_diff_keys в autoloadFrom (StudioPlugin.php). Это означает, что он даже не пытается добавить переопределение для моего пакета в файл autoload_namespaces.

Если я избавлюсь от этого вызова функции, он также добавит записи для всех зависимостей пакета. В то время как мне просто нужен мой собственный пакет. Однако я не уверен, как лучше всего это сделать.

franzliedke прокомментировал 12 декабря 2015 г.

Это окончательно исправлено. Я выбросил все слияния автозагрузчика и теперь использовал репозитории путей Composer, которые вместо этого можно использовать для регистрации локальных папок в качестве пакетов. Прекрасно работает.

Очень скоро я опубликую новый релиз. :)

Комментарий Rjs37 от 13 декабря 2015 г.

Звучит многообещающе! С нетерпением жду :).

Я протестирую его на своем ноутбуке, как только он выйдет ;). У меня это работает довольно хорошо на моем ПК-атм (только случайное изменение файла вручную), и я не хочу рисковать, ломая мой процесс разработки, лол.

franzliedke прокомментировал 13 декабря 2015 г.

Хм, надеюсь, это работает в Windows. Поскольку репозитории путей работают с символическими ссылками, я думаю, что файлы копируются (а не синхронизируются) только в Windows.

Комментарий Rjs37 от 17 декабря 2015 г.

Значит, используя dev-master, я должен увидеть фиксированное поведение? Или есть еще какие-то коммиты?

Я предполагаю, что символическая ссылка предназначена для поставщика/пакета > my_package_directory, да?

Когда я запускаю composer update, я вижу пакет регистрации [Studio]. вывод.

Но когда я подключаюсь по SSH к своему бродячему ящику и запускаю ls -l , я не вижу никаких каталогов с символическими ссылками. Я запускаю все свои команды из бродячего окна, включая загрузку студии и обновление композитора.

Я попытался выполнить вызов dd в своем поставщике услуг по работе с пакетами, и он не оказал никакого влияния, поэтому он все еще просматривает версию папки поставщика.

Vagrant синхронизирует файлы моего проекта между собой и Windows, может ли это быть конфликтом? Вы проводили какое-либо тестирование с использованием Vagrant или Homestead?

franzliedke прокомментировал 18 декабря 2015 г.

Хм, у Windows будут проблемы с символическими ссылками.

(Тем не менее, мое решение в настоящее время работает только для пакетов, которые еще не зарегистрированы в Packagist. Как только это произойдет, он, вероятно, скопирует всю папку целиком, а не создаст на нее символическую ссылку в Windows.)

Комментарий Rjs37 от 18 декабря 2015 г.

Я не обращал внимания на тот факт, что это обновление требует внесения изменений в composer.json вручную, пока не увидел комментарий по другой проблеме. Я предположил, что это была автоматическая символическая ссылка, которую установила Studio.

Я уверен, что вы правильно объясните это в файле readme, как только обновления будут помечены как выпуск.

Вот что я испытал после этого осознания:

Поскольку мой пакет является частным, его нет в Packagist, вместо этого у меня есть URL-адрес vcs. Если я добавлю строку пути вместо строки vcs, то композитор удалит существующий пакет.

Установка Composer так и не была завершена, он просто застрял во время установки пакета, хотя, похоже, он скопировал все файлы. Насколько я мог видеть, нет символических ссылок, но, как я уже сказал, установка композитора никогда не завершалась, поэтому, возможно, поэтому.

Читайте также: