2017-10-05 3 views
3

したがって、macOS High Sierra 10.13にはPHP 7.1が付属しています。 Apacheを設定するときに、/etc/php.ini.defaultファイルから新しい/etc/php.iniを作成しましたが、Apacheを再起動した後にPHPによってロードされていることを確認しましたが、macOS 10.13に付属するXdebug拡張のバージョンはロードされないXdebug on macOS 10.13 with PHP 7

$ php -i | grep php.ini 
Configuration File (php.ini) Path => /etc 
Loaded Configuration File => /etc/php.ini 

がここに私に/etc/php.iniは、私はXdebugをを設定する場所を次のようになります:あなたはphpinfo();

私のphp.iniのは間違いなくロードされて実行

[xdebug]  
zend_extension = "/usr/lib/php/extensions/no-debug-non-zts-20160303/xdebug.so" 
xdebug.remote_enable=on 
xdebug.remote_log="/var/log/xdebug.log" 
xdebug.remote_host=localhost 
xdebug.remote_handler=dbgp 
xdebug.remote_port=9000 

を[更新

$php -i | grep xdebug 
PHP Warning: Method xdebug_start_function_monitor() cannot be a NULL 
    function in Unknown on line 0 
    PHP Warning: xdebug: Unable to register functions, unable to load in Unknown on line 0 
    Segmentation fault: 11 

そして、はい、ファイルへのパスが正しい:

$ ls /usr/lib/php/extensions/no-debug-non-zts-20160303/xdebug.so 
/usr/lib/php/extensions/no-debug-non-zts-20160303/xdebug.so* 

しかし、Xdebugのはphp -iは何の結果が得られていないロードして、チェックしません] ...ここでそのタイプミスを修正

これはPHP 5で動作するために使用されていますので、今後誰かがこの問題に苦労して助けてくれることを願っています。

私はApacheのログを確認すると、私は次のエラーを取得する:

Failed loading /usr/lib/php/extensions/no-debug-non-zts-20160303/xdebug.so: dlopen(/usr/lib/php/extensions/no-debug-non-zts-20160303/xdebug.so, 9): Symbol not found: _xdebug_monitored_function_dtor 
    Referenced from: /usr/lib/php/extensions/no-debug-non-zts-20160303/xdebug.so 
    Expected in: flat namespace 
in /usr/lib/php/extensions/no-debug-non-zts-20160303/xdebug.so 

私はこのエラーを解決する方法を見つけるの面で進歩していないよ:

Symbol not found: _xdebug_monitored_function_dtor 
+0

Apache *は異なるphp.iniを使用している可能性があります(1つのphp.iniはCLI /端末用、もう1つはApache/webサーバ用)。したがって、実際のブラウザでキャプチャされた 'phpinfo()'の出力を調べて、php.iniがどのようなもので、xdebugがロードされているのかを確認する方が良いでしょう。もちろん、両方が同じiniファイルを使用する場合、そのようなチェックは端末で実行できます。そしてyes - 'zend_extension'フルパスで(安全) – LazyOne

+0

ありがとう、私は両方のCLIとブラウザをチェックし、両方が同じphp.iniファイルをロードしています。 –

答えて

7

[OK]をする必要があり、完全なパスは不要だと思います!私は、macOS High Sierra(以下にある:/usr/lib/php/extensions/no-debug-non-zts-20160303/xdebug.so)に付属するxdebugバイナリがPHP7の新しいZendエンジンと互換性がないと仮定しています。

だから私は、次のxdebug websiteから最新のソースをダウンロードしました:醸造と

  1. インストールにautoconfを。
  2. 新しいZendエンジンのビルドを設定するには、phpizeを実行します。
  3. 実行./configure
  4. 実行make

は今、新しいバイナリは、しかし、MacOSのシステムの整合性の保護(SIP)は/usr/lib/php/extensions/xdebug.soを上書きを防止することができます

modules/xdebug.soの下にあります。私はこれを無効にしたくないので、/usr/local/lib/php/extensions/の下に新しいディレクトリパスを作成し、新しいバイナリをこの場所にコピーしました。私はこのディレクトリがそれを置くための最良の場所か、これが悪い習慣であるかどうかはわかりませんが、それは私のために働いていました。

最後に私は自分のPHPを再構成しました。新しいバイナリを使用するためにiniが使用され、すべてが完全に機能しました!

+0

私はgitリポジトリをクローンし、ステップ1〜4を再現しようとしました。しかし、私はエラーメッセージを受け取ります: 致命的なエラー: 'php.h'ファイルが見つかりません – Mondy

+0

私はこれを最初に自分自身でした。私はこれを修正したものを正確に思い出すことはできません。autoconfをインストールするか、Xcode 9.0にアップグレードしていたと思います。私はこれがautoconfであったに違いないと思います。これは私のコンパイラが、最新のPHPインストールに含まれていると思われるphp.hヘッダを見ることができるようにしています。 –

2

あなたが作りました"zend_extention"のタイプミス。これはzend_extensionでなければなりません。 と私は最終的にそれはそれは完璧に動作する自分自身を実行しましたので、 代替としてzend_extension = xdebug.so が十分

+0

ありがとう、これは私が修正することができた新しい問題に私を導く。質問が更新されました。 –

3

インストールするには、xcodeコマンドラインツールが必要です。

だから、実行する必要があります。

xcode-select --install 

次にあなたがautoconfのをインストールする必要があります。

brew install autoconf 

次にあなたがのフォルダで実行する必要がその後code from here. をダウンロードする必要がソースコード:

  1. phpize
  2. ./configure
  3. make
  4. sudo cp modules/xdebug.so /usr/local/php/extensions

(ディレクトリが移動して、それを作成存在しない場合)、有効にすることができた後、最後に内部php.iniのは

zend_extension=/usr/local/php/extensions/xdebug.so 

を追加php.ini内のxdebugと再起動するapache

sudo apachectl restart