今天用rabbitmq異步優化接口時,由於當前項目沒有php-amqp擴展包,所以將另一個項目裏的整個包複製過來,結果運行後報如下錯誤:
<p>Type: Error</p>
<p>Message: Class 'PhpAmqpLib\Connection\AMQPStreamConnection' not found</p>
<p>Filename: /Users/why/Desktop/ymt/hangqing-ditu/phplib/libraries/Lib_amqp.php</p>
<p>Line Number: 35</p>
當時一臉懵比,然後用diff對比兩個項目裏的vender目錄,發現在autoload_psr4.php文件中有一處不同:
當前有問題的項目:
<?php
// autoload_psr4.php @generated by Composer
$vendorDir = dirname(dirname(__FILE__));
$baseDir = dirname($vendorDir);
return array(
'PHPMailer\\PHPMailer\\' => array($vendorDir . '/phpmailer/phpmailer/src'),
);
另一個沒問題的項目:
<?php
// autoload_psr4.php @generated by Composer
$vendorDir = dirname(dirname(__FILE__));
$baseDir = dirname($vendorDir);
return array(
'PHPMailer\\PHPMailer\\' => array($vendorDir . '/phpmailer/phpmailer/src'),
'PhpAmqpLib\\' => array($vendorDir . '/php-amqplib/php-amqplib/PhpAmqpLib'),
);
可以很明顯地發現由於是手動複製的,不是通過composer安裝的,所以並沒有在psr4文件中添加擴展的映射,果不其然,加上之後完美解決。
看來composer還是不夠熟悉,只知道composer require xxx之後直接用,需要了解一下它的原理。