iT邦幫忙

第 11 屆 iT 邦幫忙鐵人賽

1

本系列文的環境狀態,可點擊此連結後花園環境參考

今日文章會跟昨日的文末有相關,這次主要是解決此問題跟稍微介紹發生的原因。

輸入 php artisan tinker 指令後,可進入運作畫面,但再另外輸入其他指令後,就自行跳出,也未執行輸入指令的動作,看倌是否也遇到這樣的情形呢?

解決方法

在 Terminal 輸入指令

$ cd ~/.config/psysh        // 到 psysh 資料夾底下  
$ vim config.php            // 新增 config.php 檔案並編輯

如果不會用 vim 編輯器,可在 ~/.config/psysh 資料夾底下,直接新增 config.php 檔案,並放入下列程式碼後儲存。

<?php
    return [
        'usePcntl' => false,
    ];

接著,重新執行 $ php artisan tinker ,並輸入要運行的指令,應該就可以正常了運作。

發生此錯誤的原因

  • PHP 版本在 7.3.0 以上
  • Homebrew/macOS/PHP/pcntl 中的錯誤
  • 透過禁用 pcntl ,解決 php.ini
<?php

if (preg_match('/./', 'a')) echo "pre-fork works\n";

$pid = pcntl_fork();
if ($pid == -1) {
    die('fail');
} elseif ($pid) {
    if (preg_match('/./', 'a')) echo "parent works\n";
    pcntl_wait($status);
    if (pcntl_wifsignaled($status) && pcntl_wtermsig($status) == SIGSEGV) {
        die('child process segfaulted');
    }
} else {
    if (preg_match('/./', 'a')) echo "child works\n";
}

在 PHP 7.3 版以前

pre-fork works
parent works
child works

在 PHP 7.3 版後

pre-fork works
parent works
child process segfaulted

參考連結:
❁ Not working after upgrading to PHP 7.3
❁ PHP Artisan Tinker crashing from any command


上一篇
✾後花園D34✾-假的,這一切都是假的( Factory 使用 )
下一篇
✾後花園D36✾- 來播種吧! ( seeder 填充資料 )
系列文
在後花園遇見LP,Laravel及PHP的甜蜜糾纏,火熱上映49

尚未有邦友留言

立即登入留言