Als ich versuchte, Curl- und Pipe-Operatoren zu verwenden, um es direkt an PHP zu übergeben, um die heruntergeladene Installation auszuführen, erhielt ich eine Fehlermeldung:
$ curl -s https://getcomposer.org/installer | php #!/usr/bin/env php All settings correct for using Composer Downloading... The download is corrupt, retrying... Downloading... The download is corrupt, retrying... Downloading... The download is corrupt (internal corruption of phar "/work/doc/composer.phar" (truncated entry)), aborting.
Dann habe ich die Installation manuell heruntergeladen:
$ curl -s https://getcomposer.org/installer > composer
Dann habe ich manuell nachverfolgt, wo der Fehler aufgetreten ist, und dann eine try...catch-Anweisung nachverfolgt:
...... try { // test the phar validity echo $file; $phar = new Phar($file); // free the variable to unlock the file unset($phar); break; } catch (Exception $e) { if (!$e instanceof UnexpectedValueException && !$e instanceof PharException) { throw $e; } unlink($file); if ($retries) { if (!$quiet) { out('The download is corrupt, retrying...', 'error'); } } else { out('The download is corrupt ('.$e->getMessage().'), aborting.', 'error'); exit(1); } } ......
Bei der Verwendung des neuen Phar ist ein Fehler aufgetreten, daher habe ich diesen Code herausgenommen und separat ausgeführt. PHP hat diesen Fehler gemeldet:
$ cat test.php <?php $file = '/work/doc/composer.phar'; $phar = new Phar($file); unset($phar);
Führen Sie dann diese test.php aus und sehen Sie diesen Fehler:
$ php test.php PHP Fatal error: Uncaught exception 'UnexpectedValueException' with message 'internal corruption of phar "/work/doc/composer.phar" (__HALT_COMPILER(); not found)' in /work/doc/test.php:5 Stack trace: #0 /work/doc/test.php(5): Phar->__construct('/work/doc/compo...') #1 {main} thrown in /work/doc/test.php on line 5 Fatal error: Uncaught exception 'UnexpectedValueException' with message 'internal corruption of phar "/work/doc/composer.phar" (__HALT_COMPILER(); not found)' in /work/doc/test.php:5 Stack trace: #0 /work/doc/test.php(5): Phar->__construct('/work/doc/compo...') #1 {main} thrown in /work/doc/test.php on line 5
Aber ich habe bereits ein heruntergeladenes Skript mit dem Namen „composer.phar“: Auch wenn ich test.php „composer.phar“ nenne, funktioniert es nicht. Hier sind die Kompilierungsparameter meines PHP:
./configure --prefix=/opt/php/default --with-config-file-path=/opt/php/default/etc --with-mysql --with-mysqli --with-iconv-dir --with-freetype-dir --with-jpeg-dir --with-png-dir --with-zlib --with-libxml-dir --enable-xml --disable-rpath --enable-bcmath --enable-shmop --enable-sysvsem --enable-inline-optimization --with-curl --with-curlwrappers --enable-mbregex --enable-fpm --enable-mbstring --with-mcrypt --with-gd --enable-gd-native-ttf --with-openssl --with-mhash --enable-pcntl --enable-sockets --with-ldap --with-ldap-sasl --with-libdir=lib64 --with-xmlrpc --enable-zip --enable-soap --with-pear --enable-pdo --with-pdo-mysql --with-gettext --enable-exif --enable-wddx --enable-calendar --enable-ftp --enable-dba --enable-sysvmsg --enable-sysvshm --enable-debug --enable-maintainer-zts --with-pcre-regex --enable-gd-jis-conv --with-apxs2=/opt/apache/default/bin/apxs
跑下这个,
应该能看到这个选项是“试验性质”的,在http://us.php.net/manual/en/wrappers.... 里也找不到curl作为wrapper的正式说明。
况且,确实会导致fopen工作不正常。
去掉编译时的 --with-curlwrappers 参数,问题就解决了,具体为什么我不太清楚。