web-dev-qa-db-ja.com

PHP MAMPでプロセス制御拡張(PCNTL)を有効にする方法?


MAMPを使用しており、-pcntl現在のMAMPインストール。どうすればできますか?

ご協力いただきありがとうございます。

30
Lina

PCNTLを拡張機能としてコンパイルし、既存のPHPビルドにリンクする方法がありますが、それは少し詳細です。

Mac OSX Snow Leopard(64ビット)で、MAMPとPHPバージョン5.3.6を使用して以下を実行しています。変更することを忘れないでPHPあなたのものが違うなら次の行!

makeは必須であり、Mac OSXにはデフォルトではインストールされません。これはMac開発者ツールを介してインストールする必要があります http://developer.Apple.com/unix/

まず、MAMPで使用しているバージョンに一致するPHPソースコードのtarをダウンロードします(たとえば、鉱山は5.3.6です)。これは http:// www.php.net/releases/ 。解凍してCDをphp- [version]/ext/pcntlに、例:

$ wget http://museum.php.net/php5/php-5.3.6.tar.gz
$ tar xvf php-5.3.6.tar.gz
$ cd php-5.3.6/ext/pcntl

次に、MAMPに付属のバイナリファイルであるpcntlディレクトリでphpizeを実行する必要があります。

pcntl$ /Applications/MAMP/bin/php/php5.3.6/bin/phpize

これにより、コンパイル用の拡張機能を準備するために必要な一連のファイルが作成されます。

MAMP PHPはこの方法で構築されているため、ライブラリを32ビットおよび64ビットのデュアルアーキテクチャでコンパイルするように指示するために、いくつかのフラグを追加する必要があります。これを行わない場合、コンパイルされた共有オブジェクトは機能しません。

pcntl$ MACOSX_DEPLOYMENT_TARGET=10.6
pcntl$ CFLAGS="-Arch i386 -Arch x86_64 -g -Os -pipe -no-cpp-precomp"
pcntl$ CCFLAGS="-Arch i386 -Arch x86_64 -g -Os -pipe"
pcntl$ CXXFLAGS="-Arch i386 -Arch x86_64 -g -Os -pipe"
pcntl$ LDFLAGS="-Arch i386 -Arch x86_64 -bind_at_load"
pcntl$ export CFLAGS CXXFLAGS LDFLAGS CCFLAGS MACOSX_DEPLOYMENT_TARGET

次に、./configureおよびmakeを実行して、共有オブジェクトを構築します。

pcntl$ ./configure
pcntl$ make

これにより、pcntl.soというファイルがmodulesディレクトリに配置されます。このファイルをMAMPのPHP extensionsディレクトリにコピーします。

pcntl$ cp modules/pcntl.so /Applications/MAMP/bin/php/php5.3.6/lib/php/extensions/no-debug-non-zts-20090626/

最後に、PHP INIファイルを編集して、拡張子を含めます。

$ echo "extension=pcntl.so" >> /Applications/MAMP/bin/php/php5.3.6/conf/php.ini

PCNTLが有効になります。追加されたかどうかを確認するには、次のコマンドを実行します。

$ /Applications/MAMP/bin/php/php5.3.6/bin/php --ri pcntl

pcntl

pcntl support => enabled

あなたがそれを見れば、それはうまくいきました!何か問題が発生した場合は、pcntl.soファイルをMAMP PHP extensionsディレクトリから削除し、INI設定を削除して、もう一度試してください。

59
Jon Cairns

MACに「brew」がインストールされている場合は、次のことができるはずです。

brew install php53-pcntl

私はMAMPの専門家ではありません。

==== EDIT ====(反対票に対応して)

Ian-Lewiss-MacBook-Pro:~ ianlewis$ brew install php53-pcntl
Warning: php53-pcntl-5.3.25 already installed

Ian-Lewiss-MacBook-Pro:~ ianlewis$ brew info php53-pcntl
php53-pcntl: stable 5.3.25
http://php.net/manual/en/book.pcntl.php
/usr/local/Cellar/php53-pcntl/5.3.23 (3 files, 32K)
  Built from source
/usr/local/Cellar/php53-pcntl/5.3.25 (3 files, 32K) *
  Built from source
https://github.com/josegonzalez/homebrew-php/commits/master/Formula/php53-pcntl.rb
==> Dependencies
Build: autoconf
Required: php53
==> Options
--without-config-file
    Do not add ext-pcntl.ini to /usr/local/etc/php/5.3/conf.d
--without-homebrew-php
    Ignore homebrew PHP and use default instead
==> Caveats
To finish installing pcntl for PHP 5.3:
  * /usr/local/etc/php/5.3/conf.d/ext-pcntl.ini was created,
    do not forget to remove it upon extension removal.
  * Restart your webserver.
  * Write a PHP page that calls "phpinfo();"
  * Load it in a browser and look for the info on the pcntl module.
  * If you see it, you have been successful!
5
Ian Lewis

簡単にするために、スクリプトを作成しました (他の投稿から )。私はそれを使用して、拡張機能pcntl、sysvmsg、sysvshm、sysvsemなどをMAMPに追加しました。 cdを使用して拡張ディレクトリに移動するか、ディレクトリを引数としてスクリプトに渡します。例./addExtension.sh php-5.3.6/ext/pcntl

#!/bin/bash
DIR=$1
MAMP_PHP=$2
if [ -z "$DIR" ]
then
  DIR=`pwd`
fi

if [ -z "$MAMP_PHP" ]
then
  MAMP_PHP='/Applications/MAMP/bin/php/php5.3.6'
fi

EXTENSION=${DIR##*/}

echo Extension: $EXTENSION  

cd $DIR

eval "${MAMP_PHP}/bin/phpize"


MACOSX_DEPLOYMENT_TARGET=10.6
CFLAGS="-Arch i386 -Arch x86_64 -g -Os -pipe -no-cpp-precomp"
CCFLAGS="-Arch i386 -Arch x86_64 -g -Os -pipe"
CXXFLAGS="-Arch i386 -Arch x86_64 -g -Os -pipe"
LDFLAGS="-Arch i386 -Arch x86_64 -bind_at_load"
export CFLAGS CXXFLAGS LDFLAGS CCFLAGS MACOSX_DEPLOYMENT_TARGET

./configure
make

cp modules/${EXTENSION}.so "${MAMP_PHP}/lib/php/extensions/no-debug-non-zts-20090626/"

PHP_INI_PATH="${MAMP_PHP}/conf/php.ini"
sed -e "/extension=${EXTENSION}.so/ d" $PHP_INI_PATH > TMP
mv TMP $PHP_INI_PATH
echo "extension=${EXTENSION}.so" >> $PHP_INI_PATH

eval "${MAMP_PHP}/bin/php --ri ${EXTENSION}"
3
rp90

Php 5.6.2を使用してYosemiteとMampで機能するわずかに異なる命令を見つけました。手順はここにあります: https://www.flynsarmy.com/2015/01/get-artisan-tinker-working-osx-10-mamp/

wget http://museum.php.net/php5/php-5.6.2.tar.gz
tar -xzvf php-5.6.2.tar.gz
mv php-5.6.2 php
mkdir -p /Applications/MAMP/bin/php/php5.6.2/include
mv php /Applications/MAMP/bin/php/php5.6.2/include

cd /Applications/MAMP/bin/php/php5.6.2/include/php
./configure

MACOSX_DEPLOYMENT_TARGET=10.10
CFLAGS="-Arch i386 -Arch x86_64 -g -Os -pipe -no-cpp-precomp"
CCFLAGS="-Arch i386 -Arch x86_64 -g -Os -pipe"
CXXFLAGS="-Arch i386 -Arch x86_64 -g -Os -pipe"
LDFLAGS="-Arch i386 -Arch x86_64 -bind_at_load"
export CFLAGS CXXFLAGS LDFLAGS CCFLAGS MACOSX_DEPLOYMENT_TARGET

cd ext/pcntl
phpize
./configure
make
cp modules/pcntl.so /Applications/MAMP/bin/php/php5.6.2/lib/php/extensions/no-debug-non-zts-20131226
2
davydka

MacPortsを使って問題を解決しました。

コマンドを実行しました:

Sudo port install php5-pcntl
2
padawan
  1. https://www.php.net/releases/ からphpをダウンロードします
  2. tar -xzvf php-7.3.8.tar.gz(出力フォルダーにはPhpSrcFolderという名前を付けます)
  3. MAMP binディレクトリがパスにあることを確認してください=> echo $PATH。これを行うには、追加のツールが必要です。 (すでに$ PATHにmampのビンがある場合は、ステップ5にスキップしてください)
  4. 次のようにmampのビンをパスに追加できます。最初に、mampが使用するphpのバージョンを~/.profileからgrepします(PS:Mampはエイリアスを後者にphpに追加します)。次に、mamp binをPATHに追加します。使用されているバージョン。

pHP_VERSION = grep "alias php" ~/.profile | cut -d"/" -f6 | cut -c4-をエクスポート

#同じphp設定を使用するには、php.iniフォルダーをポイントします

pHPRC = "/ Library/Application Support/appsolute/MAMP PRO/conf /"をエクスポートします

export PATH =/Applications/MAMP/bin/php/php $ PHP_VERSION/bin:$ PATH

PS:端末を閉じて再度開く

  1. PhpSrcFolder/ext/pcntlを/Applications/MAMP/bin/php/php7.3.8/include/php/ext/pcntlにコピーします

  2. /Applications/MAMP/bin/php/php7.3.8/include/php/ext/pcntlに移動し、phpizeコマンドを実行します。 Xcodeと関連ツールもインストールする必要があることに注意してください。

  3. これで、./configure && make && make installを実行できるようになります。これにより、拡張機能が/Applications/MAMP/bin/php/php7.3.8/include/php/ext/pcntl/modules/pcntl.soにビルドされ、コピーして/Applications/MAMP/bin/php/php7.3.8/lib/php/extensions/no-debug-non-zts-20180731/pcntl.soに貼り付けられます

  4. 次に、php.iniを編集して、他の拡張機能と同じようにモジュールを有効にします。 php.inifor meを実行してロードされたwhich phpのパスを取得します:/Library/Application Support/appsolute/MAMP PRO/conf/php7.3.8.iniとpcntl拡張子があることを再確認します。

[pcntl]

extension = pcntl.so