ต้องการ (ผู้ขาย / autoload.php): ไม่สามารถเปิดสตรีม


133

ฉันรู้ว่ามีการโพสต์ปัญหานี้หลายครั้ง แต่สำหรับฉันดูเหมือนว่าจะเป็นปัญหาที่แตกต่างออกไป

อันที่จริงข้อผิดพลาดนี้

คำเตือน: ต้องใช้ (vendor / autoload.php): ไม่สามารถเปิดสตรีม: ไม่มีไฟล์หรือไดเร็กทอรีดังกล่าวใน C: \ xampp \ htdocs \ site_web \ send_mail.php ในบรรทัดที่ 3

ข้อผิดพลาดร้ายแรง: ต้องใช้ (): ไม่สามารถเปิด 'ผู้ขาย / autoload.php' ที่จำเป็น (include_path = 'C: \ xampp \ php \ PEAR') ใน C: \ xampp \ htdocs \ site_web \ send_mail.php ในบรรทัดที่ 3

ปรากฏขึ้นที่จุดเริ่มต้นของรหัสของฉันจากบรรทัดนี้:

require 'vendor/autoload.php';

ดังนั้นฉันเดาว่าต้องมีไฟล์ /vendor/autoload.php อยู่ที่ไหนสักแห่งในคอมพิวเตอร์ของฉัน (ฉันติดตั้งนักแต่งเพลงและเรียกใช้composer require phpmailer/phpmailer)

ดังนั้นฉันจึงค้นหาไฟล์นี้โดยใช้: dir /s autoload.phpในบรรทัดคำสั่งของ Windows และพบไฟล์ที่นี่: C:\Windows\SysWOW64\vendor\autoload.php,

แต่สำหรับฉันโฟลเดอร์syswow64ไม่มีอะไรให้ดูในautoload.phpฉันไม่เห็นสิ่งที่ฉันขาดหายไปที่นี่


นอกจากนี้ยังสามารถเกิดขึ้นได้หากคุณมี php artisan ขึ้นหรือลงในไฟล์ composer.json ของคุณในส่วนสคริปต์ที่ติดตั้งล่วงหน้า ดูเหมือนว่าจะต้องใช้ไฟล์ในโฟลเดอร์ผู้ขายเพื่อเรียกใช้โหมดการบำรุงรักษาซึ่งยังไม่พร้อมใช้งาน
Thomas

คำตอบ:


235

สิ่งที่คุณขาดหายไปกำลังทำงานอยู่composer installซึ่งจะนำเข้าแพ็คเกจของคุณและสร้างโฟลเดอร์ผู้ขายพร้อมกับสคริปต์โหลดอัตโนมัติ

ตรวจสอบให้แน่ใจว่าเส้นทางสัมพัทธ์ของคุณถูกต้อง ยกตัวอย่างเช่นสคริปต์เช่นใน PHPMailer อยู่ในด้านล่างรากโครงการเพื่อให้ญาติเส้นทางที่ถูกต้องในการโหลดโหลดนักแต่งเพลงจากที่นั่นจะเป็นexamples/../vendor/autoload.php

autoload.php ที่คุณพบC:\Windows\SysWOW64\vendor\autoload.phpอาจเป็นการติดตั้งนักแต่งเพลงทั่วโลกซึ่งโดยปกติคุณจะใส่สิ่งต่างๆเช่น phpcs, phpunit, phpmd เป็นต้น

composer updateคือไม่ได้ในสิ่งเดียวกันและอาจจะไม่ได้สิ่งที่คุณต้องการใช้ หากโค้ดของคุณได้รับการทดสอบด้วยแพ็กเกจเวอร์ชันปัจจุบันการรันupdateอาจทำให้เกิดการแตกหักซึ่งอาจต้องใช้การทำงานและการทดสอบเพิ่มเติมดังนั้นอย่ารันupdateเว้นแต่คุณจะมีเหตุผลเฉพาะและเข้าใจว่ามันหมายถึงอะไร หากต้องการชี้แจงเพิ่มเติม - คุณควรจะรันcomposer updateเฉพาะในเครื่องเท่านั้นไม่ควรอยู่บนเซิร์ฟเวอร์ของคุณเนื่องจากมีแนวโน้มที่จะทำให้แอปที่ใช้งานจริงหยุดทำงาน

ฉันมักจะเห็นข้อร้องเรียนว่าผู้คนไม่สามารถใช้นักแต่งเพลงได้เนื่องจากพวกเขาไม่สามารถเรียกใช้งานบนเซิร์ฟเวอร์ของตนได้ (เช่นเพราะแชร์และไม่มีการเข้าถึงเชลล์) ในกรณีนี้คุณยังสามารถใช้นักแต่งเพลงได้: เรียกใช้ในเครื่อง (สภาพแวดล้อมที่ไม่มีข้อ จำกัด ดังกล่าว) และอัปโหลดโฟลเดอร์ผู้จำหน่ายในพื้นที่ที่สร้างขึ้นพร้อมกับสคริปต์ PHP อื่น ๆ ทั้งหมดของคุณ

การรันcomposer update ยังดำเนินการ a composer installและหากคุณยังไม่มีvendorโฟลเดอร์ (เช่นคุณมีการชำระเงินใหม่ของโปรเจ็กต์) จากนั้นcomposer installดำเนินการ a อย่างมีประสิทธิภาพcomposer updateแต่ก็ยังจำเป็นที่จะต้องเข้าใจความแตกต่างระหว่างทั้งสองเนื่องจากไม่สามารถใช้แทนกันได้อย่างแน่นอน

โปรดทราบว่าคุณสามารถอัปเดตแพ็กเกจเดียวได้โดยตั้งชื่อแพ็กเกจเช่น:

composer update ramsey/uuid

การดำเนินการนี้จะแก้ไขเวอร์ชันที่ระบุในของคุณอีกครั้งcomposer.jsonและติดตั้งในโฟลเดอร์ผู้จำหน่ายของคุณและอัปเดตcomposer.lockไฟล์ของคุณให้ตรงกัน สิ่งนี้มีโอกาสน้อยที่จะก่อให้เกิดปัญหามากกว่าทั่วไปcomposer updateหากคุณต้องการอัปเดตเฉพาะสำหรับแพ็คเกจเดียว

Composer 2.0 (ออกเร็ว ๆ นี้) ควรลบความไม่สอดคล้องที่เหลืออยู่ระหว่างผลการติดตั้งและการอัปเดต


1
ฉันจะเรียกใช้การติดตั้งผู้แต่งได้อย่างไร ไม่รู้จักคำสั่ง
Yvonne Aburrow

ขอบคุณพบสิ่งนั้นและดาวน์โหลด - แต่ถามฉันว่า PHP ติดตั้งในเครื่องที่ไหน ฉันไม่ต้องการติดตั้ง PHP ในเครื่อง (หรือ Composer) ฉันแค่ต้องการเรียกใช้บนแอป Google Cloud
Yvonne Aburrow

ฉันกำลังทำตามขั้นตอนในเอกสารนี้ที่นี่: github.com/googlecloudplatform/google-cloud-php
Yvonne Aburrow

1
Google cloud สำหรับ PHP ให้นักแต่งเพลงติดตั้งการอ้างอิงคุณเพียงแค่ต้องตั้งค่าดูที่นี่: cloud.google.com/appengine/docs/flexible/php/…
Synchro

2
ใช่ Google cloud จะต้องทำงานcomposer installจากนั้นจะอ่านเนื้อหาของcomposer.jsonไฟล์ของคุณและติดตั้งการอ้างอิงทั้งหมดของคุณลงในvendorโฟลเดอร์ หากไม่เป็นเช่นนั้นฉันขอแนะนำให้อ่านเอกสารที่ฉันชี้ไปและตรวจสอบซ้ำทั้งหมดเท่านั้น นี่คือความแตกต่างระหว่าง "การอัปโหลด" และ "การทำให้ใช้งานได้"
Synchro

40

หากคุณได้รับข้อผิดพลาดเมื่อคุณเรียกใช้

composer install

เพียงเรียกใช้คำสั่งนี้ก่อน

composer dump-autoload

คำสั่งนี้จะล้างไฟล์ที่คอมไพล์และพา ธ ทั้งหมด


15

@Bashir เกือบจะช่วยฉัน แต่ฉันต้องการ:

composer update --no-scripts

ฉันพบคำตอบที่นี่: https://laracasts.com/discuss/channels/general-discussion/fatal-error-class-illuminatefoundationapplication-not-found-in-pathtoprojectbootstrapappphp-on-line-14?page=0


อย่าทำเช่นนี้เว้นแต่คุณจะเข้าใจว่ามันกำลังทำอะไรอยู่ มีแนวโน้มที่จะทำลายแอปในระหว่างการผลิต
Synchro

9

ก่อนอื่นให้แน่ใจว่าคุณได้ติดตั้งตัวแต่งเพลงแล้ว

composer install

หากคุณติดตั้งแล้วให้อัปเดตผู้แต่ง

composer update

1
คำตอบนี้ต้องการการแก้ไขอย่างจริงจังเพื่อเป็นประโยชน์ต่อผู้ใช้ โปรดระบุคำแนะนำของคุณอย่างชัดเจนและให้ตัวอย่างโค้ดที่จะเป็นประโยชน์ในสถานการณ์นี้
Stefan Crain

8

การautoload.phpกำหนดค่าที่เหมาะสม:

A) คำตอบด่วน :

เส้นทาง autoload.php ของคุณไม่ถูกต้อง กล่าวคือ C:\Windows\SysWOW64\vendor\autoload.php จนถึงปัจจุบัน: คุณต้องเปลี่ยนเป็น:C:\Users\<Windows User Name>\vendor\autoload.php


B) ขั้นตอนพร้อมตัวอย่าง: เราจะใช้facebook / php-graph-sdkเป็นตัวอย่าง เปลี่ยนPackage Nameเป็นตามต้องการ

  1. ติดตั้งcomposer.exe
  2. เปิด CMD Prompt + R+ ประเภทCMD
  3. เรียกใช้คำสั่งนี้: composer require facebook/graph-sdk
  4. รวมเส้นทางในหน้า PHP ของคุณ: require_once 'C:\Users\<Windows User Name>\vendor\autoload.php';
  5. กำหนดการกำหนดค่าSecretsและAccess Tokenสำหรับแพ็คเกจของคุณ ... ฯลฯ
  6. มีความสุข codinig

C) รายละเอียดเพิ่มเติม:

การติดตั้งนักแต่งเพลงบน windows จะตั้งค่าเส้นทางเริ่มต้นสำหรับ pacakges ของคุณ คุณสามารถค้นหาได้ที่นั่นและรวมเส้นทางโหลดอัตโนมัติ:

C:\Users\<Windows User Name>\vendor

สำหรับคำถามเดียวกันกับที่คุณถาม คำตอบก็คือเส้นทางนี้สำหรับWAMP เซิร์ฟเวอร์ 64 บิตสำหรับ Windows

จากนั้นในแอปพลิเคชัน PHP ของคุณให้เปลี่ยนสิ่งนี้:

require_once __DIR__ . '/vendor/autoload.php'; 

ถึง:

require_once 'C:\Users\<Windows User Name>\vendor\autoload.php'; 

ค้นหาชื่อผู้ใช้ windows ของคุณภายใต้C:\Users\

ก่อนหน้านี้ตามที่ระบุไว้ก่อนหน้านี้ใน B) คุณต้องรันคำสั่งนี้:

composer require <package name>

สำหรับ facebook php SDK เช่น:

composer require facebook/graph-sdk

ขอบคุณที่ถามคำถามนี้ ชื่นชมเพราะช่วยฉันแก้ไขปัญหาที่คล้ายกันและยุติการเขียนบทช่วยสอนง่ายๆนี้


5

หากคุณโคลนโครงการของคุณจาก Github หรือได้มาจากที่อื่นคุณจะพบข้อผิดพลาดนี้ นั่นเป็นเพราะคุณไม่มีโฟลเดอร์ผู้ขายและไฟล์อื่น ๆ โฟลเดอร์ผู้ขายประกอบด้วยแพคเกจซึ่งจะขึ้นอยู่กับโครงการของคุณ อ้างอิงแพคเกจจะถูกเก็บไว้ในcomposer.jsonไฟล์และโฟลเดอร์ได้รับการยกเว้นในขณะที่ผลักดันที่จะ Github

แก้ไขข้อผิดพลาดนี้เพียงแค่เรียกใช้:

composer install

จากนั้นคุณจะได้รับทรัพย์สินทั้งหมดที่จำเป็นสำหรับโครงการของคุณ


4

วิ่งcomposer update. แค่นั้นแหละ


6
ใช่นั่นเป็นส่วนหนึ่งของคำตอบที่ยอมรับแล้ว ประเด็นในการทำซ้ำคืออะไร?
Nico Haase

นอกจากนี้ยังเป็นคำแนะนำที่ไม่ดีซึ่งมีแนวโน้มที่จะทำลายแอปในการผลิต
Synchro

2

ฉันมีเส้นทางนี้ในเครื่องของฉัน:

C:/xampp5.0/htdocs/project-recordando-symfony/project-recordando-symfony

จากนั้นฉันก็วิ่งcomposer installหรือ / และcomposer updateส่งกลับข้อผิดพลาดนี้:

ErrorException ZipArchive::extractTo...

ข้อผิดพลาดนั้นเป็นเพราะเส้นทางของคุณยาวเกินไปฉันเปลี่ยนเป็น:

C:/xampp5.0/htdocs/p-symfony/*

และได้ผล!


2

ขั้นแรกตรวจสอบเส้นทางภายใน index.php

require __DIR__.'/../vendor/autoload.php';

$app = require_once __DIR__.'/../bootstrap/app.php';

ในกรณีของฉันเส้นทางใช้งานไม่ได้ฉันต้องตรวจสอบไดเรกทอรี


ประหยัดเวลาของฉันขอบคุณและคุณได้รับ 1 upvote mate nice work
iamnabink

1

ฉันสามารถแก้ไขได้โดยการลบนักแต่งเพลงและติดตั้งใหม่ด้วยวิธีที่เหมาะสม นี่คือสิ่งที่ฉันทำ:

  • sudo apt ลบนักแต่งเพลง
  • sudo apt autoclean && sudo apt autoremove
  • ติดตั้งทั่วโลกด้วยคำแนะนำจาก: https://getcomposer.org/doc/00-intro.md ดาวน์โหลดจาก: https://getcomposer.org/installer global install: mv composer.phar / usr / local / bin / composer ( หมายเหตุ: ฉันต้องย้ายของฉันไปที่ mv composer.phar / usr / bin / composer)

จากนั้นฉันก็สามารถติดตั้งนักแต่งเพลงให้ทำงานได้อีกครั้ง พบคำตอบของฉันที่ด้านล่างของปัญหานี้: https://github.com/composer/composer/issues/5510


1

ในโฟลเดอร์โครงการของคุณไม่มีโฟลเดอร์ผู้ขายดังนั้นคุณจึงได้รับข้อผิดพลาดนี้:

คำเตือน: ต้องใช้ (vendor / autoload.php): ไม่สามารถเปิดสตรีม: ไม่มีไฟล์หรือไดเร็กทอรีดังกล่าวใน

เมื่อคุณดาวน์โหลดโปรเจ็กต์ผ่านgitโปรเจ็กต์จะถูกดาวน์โหลดโดยไม่มีโฟลเดอร์ผู้ขาย

คุณต้องการ/vendorเพราะแพ็คเกจทั้งหมดของคุณอยู่ที่นั่นรวมถึงคลาสทั้งหมดที่ Laravel ใช้ ไดเร็กทอรีผู้จำหน่ายมีการอ้างอิงของนักแต่งเพลงของคุณ

วิธีแก้ปัญหานั้นง่ายเพียงเรียกใช้คำสั่งนี้:

composer update --no-scripts 
composer update
  • composer update --no-scriptsมันจะข้ามการดำเนินการของสคริปต์ที่กำหนดไว้ในcomposer.jsonไฟล์
  • composer updateจะอัปเดตการอ้างอิงของคุณตามที่ระบุไว้ในcomposer.jsonไฟล์

ด้วยคำสั่งนี้คุณจะสร้างโฟลเดอร์ผู้ขายใหม่ในโปรเจ็กต์ของคุณและหลังจากนั้นโปรเจ็กต์ของคุณจะเริ่มทำงานตามปกติ


0

จะมีไดเร็กทอรีที่เรียกว่า "vendor" ซึ่งจำเป็นต้องอยู่ในไดเร็กทอรีรูทของคุณหากคุณมีที่เก็บโคลนและพยายามตั้งค่าในเวลานั้นเกิดข้อผิดพลาดประเภทนี้

ไฟล์ ".gitingore" ได้เขียนโค้ดเพื่อไม่ให้รวมไดเร็กทอรีผู้ขายใน GIT ดังนั้นหลังจากโคลน GIT โปรเจ็กต์ของคุณประสบปัญหาไดเร็กทอรีผู้ขายหายไป

เมื่อคุณเพิ่มไดเรกทอรีผู้ขายโครงการของคุณจะเริ่มทำงานอีกครั้ง


0

สร้างไฟล์ composer.json ด้วยไลบรารีที่จำเป็นสำหรับเช่น:

{
    "require": {
        "mpdf/mpdf": "^6.1"
    }
}

ดำเนินการคำสั่งด้านล่างในกรณีที่มี composer.json อยู่:

composer install

ในกรณีของ Drupal:

ใช้โฟลเดอร์รูทของเว็บของ drupal เพื่อรวม autoload สำหรับเช่น:

define('DRUPAL_ROOT', getcwd());
require_once DRUPAL_ROOT . '/vendor/autoload.php';

ในกรณีของระบบอื่น: ใช้ตัวแปรโฟลเดอร์รูทหรือตำแหน่งเพื่อรวม autoload.php


0

สำหรับฉันเพียงแค่รันคำสั่งนี้ก่อน

composer dump-autoload

เพื่อเพิ่มโฟลเดอร์ผู้ขาย

จากนั้นรันคำสั่งนี้

composer update --no-scripts

เพื่ออัปเดตผู้แต่ง


0

ข้อผิดพลาดนี้เกิดขึ้นเนื่องจากไม่มีไฟล์บางไฟล์และสาเหตุหลักคือ " Composer "

ใส่คำอธิบายภาพที่นี่

ก่อนอื่นให้เรียกใช้คำสั่งเหล่านี้ใน CMD

php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
php -r "if (hash_file('sha384', 'composer-setup.php') === 'e0012edf3e80b6978849f5eff0d4b4e4c79ff1609dd1e613307e16318854d24ae64f26d17af3ef0bf7cfb710ca74755a') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;"
php composer-setup.php
php -r "unlink('composer-setup.php');"

จากนั้นสร้างโครงการใหม่
ตัวอย่าง:

D:/Laravel_Projects/New_Project
laravel new New_Project

หลังจากนั้นเริ่มเซิร์ฟเวอร์โดยใช้

php artisan serve

-1

เปลี่ยนคุณสมบัติ auto_prepend_file บน php.ini

; Automatically add files before PHP document. 
;http://php.net/auto-prepend-file 
auto_prepend_file =

สิ่งนี้เกี่ยวข้องกับคำถามอย่างไร? มีคำตอบที่เป็นที่ยอมรับพร้อมวิธีแก้ปัญหาอื่น ๆ
Nico Haase

ฉันมีข้อผิดพลาดต่อไปนี้ในเช้าวันนี้ "คำเตือน: ไม่รู้จัก: ไม่สามารถเปิดสตรีม: ไม่มีไฟล์หรือไดเร็กทอรีดังกล่าวใน Unknown ที่บรรทัด 0" ดังนั้นฉันจึงเขียนโซลูชันนี้
ercvs
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.