簡體   English   中英

使用PHP 7的macOS 10.13上的Xdebug

[英]Xdebug on macOS 10.13 with PHP 7

因此macOS High Sierra 10.13現在附帶了PHP 7.1。 雖然配置Apache我還創建了一個新的/etc/php.ini/etc/php.ini.default文件,提出一定要檢查重啟動Apache在這之后正被裝載PHP,Xdebug擴展的但是版本附帶運行phpinfo();時,macOS 10.13似乎沒有加載或顯示phpinfo();

我的php.ini肯定正在加載:

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

這是我的/etc/php.ini配置Xdebug的樣子:

[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

[更新,在這里修正了錯字...]

但是,Xdebug無法加載,並且檢查php -i沒有結果:

$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*

這曾經在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

好的,所以我終於自己運行了它,它運行完美! 我假設macOS High Sierra隨附的xdebug二進制文件(位於: /usr/lib/php/extensions/no-debug-non-zts-20160303/xdebug.so )與PHP7的新Zend引擎不兼容。

因此,我從xdebug網站下載了最新資源,並執行了以下操作:

  1. 用brew安裝autoconf;
  2. 運行phpize為新的Zend引擎配置構建;
  3. 運行./configure
  4. 運行make

現在,新的二進制文件位於modules/xdebug.so

但是,macOS系統完整性保護(SIP)將阻止您覆蓋/usr/lib/php/extensions/下的xdebug.so 我不想禁用此功能,因此我在/usr/local/lib/php/extensions/下創建了一個新目錄路徑,並將新二進制文件復制到該位置。 我不確定該目錄是否是放置它的最佳位置,或者這不是一個好習慣,但是對我有用。

最后,我重新配置了php.ini以使用新的二進制文件,並且一切正常!

為了安裝它,您必須具有xcode命令行工具。

因此,您需要運行:

xcode-select --install

然后,您需要安裝autoconf:

brew install autoconf

然后,您必須從此處下載代碼。 之后,您必須在源代碼的文件夾中運行:

  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

您在“ zend_extention”中輸入了錯誤。 這應該是zend_extension。 而且我認為完整路徑是不必要的zend_extension = xdebug.so應該足夠了

對於遲到此晚會的任何人,問題的最初嘗試似乎在macOS 10.13.6中都可以正常工作

大家在嘗試在Mac上安裝xDebug時遇到錯誤的人都好。

錯誤:未知類型名稱'uint64_t'

您的本地/ bin / include中有文件導致此錯誤。 通過刪除它們,您可以擺脫錯誤。 不過,您可能必須重新安裝啤酒。

https://github.com/cython/cython/issues/2009

如果在Mac OS X mojave上安裝了帶有多個PHP版本(即7.1、7.2和7.3)的brew,則可以執行以下操作:

  1. 使用brew brew install autoconf

  2. 更改為要Xdebug的PHP版本,運行brew unlink php@7.1 && brew link --force --overwrite php 這將從PHP 7.1切換到PHP 7.3。

  3. xdebug網站下載最新的Xdebug源。

  4. 提取Xdebug tar,並導航到提取的目錄,您將在其中查看所有文件。

  5. 運行phpize來配置新的Zend引擎的構建。

  6. 運行./configure

  7. 運行make

  8. Xdebug擴展名xdebug.so將在modules目錄中進行編譯。

  9. /usr/local/lib/php/7.3.1/extensions/下創建一個新的目錄路徑,並將xdebug.so復制到該位置。 這里, 7.3.1是我之前切換的當前版本,請更改此版本以匹配您的PHP版本。

  10. 在編輯器中打開php.ini ,然后輸入zend_extension="/usr/local/lib/php/7.3.1/extensions/xdebug.so"然后保存更改。

  11. 運行php -v ,它將顯示Xdebug已正確配置。

如果要在另一個PHP版本上配置Xdebug,則只需從步驟2一直重復到11。如先前的文章所述,您無需在Mac OS X上禁用/啟用系統完整性保護。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM