После обновления php с 7.0.14 до 7.0.26 php artisan serve
подает эту ошибку
Предупреждение: Неизвестно: не удалось открыть поток: нет такого файла или каталога в Unknown в строке 0 Неустранимая ошибка: Неизвестно: Не удалось открыть окно «/Applications/XAMPP/xamppfiles/htdocs/school-dashboard/public/server.php» (include_path = '.:') в Unknown в строке 0
Хорошо, после нескольких часов вытягивания волос я наконец выяснил, в чем проблема.
В laravel 4 php artisan serve
это под капотом
<?php namespace Illuminate\Foundation\Console; use Illuminate\Console\Command; use Symfony\Component\Console\Input\InputOption; class ServeCommand extends Command { public function fire() { $this->checkPhpVersion(); chdir($this->laravel['path.base']); $host = $this->input->getOption('host'); $port = $this->input->getOption('port'); $public = $this->laravel['path.public']; $this->info("Laravel development server started on http://{$host}:{$port}"); passthru('"'.PHP_BINARY.'"'." -S {$host}:{$port} -t \"{$public}\" server.php"); } }
Это по существу это в простой php: php -S 127.0.0.1:8000 -t public serve.php
– см. Документы для php, встроенных в сервер, для получения дополнительной информации .
И это сработало хорошо и dandy перед php 7.0.26, где последний параметр для встроенного сервера php -S
был изменен на флаг, так что вы должны вызвать его, как этот php -S 127.0.0.1:8000 -t public -f serve.php
.
Если вы хотите обслуживать его с помощью php artisan serve
вам придется переопределить ServeCommand
и изменить последнюю строку метода fire()
на это:
passthru('"'.PHP_BINARY.'"'." -S {$host}:{$port} -t \"{$public}\" -f server.php");
Или вы можете изменить его непосредственно в ServeCommand
, но если вы сделаете обновление или установку композитора, вам придется сделать это снова.