ホームページ  >  記事  >  バックエンド開発  >  php cli 設定ファイルの問題の分析、_PHP チュートリアル

php cli 設定ファイルの問題の分析、_PHP チュートリアル

WBOY
WBOYオリジナル
2016-07-12 09:07:25962ブラウズ

php cli設定ファイルの問題分析、

はじめに

今日、他の人に protobuf の使い方を教えていたときに、php cli モードで奇妙な問題を発見しました。解決策を見つけるのに長い時間がかかりました。ここで共有します。

問題の説明

ここで最初に protobuf プロトコルを導入し、allegro/php-protobuf 拡張機能を使用してインストールしました。他の同僚もここ数日でこれを使用する予定なので、protobuf が PHP クラス ライブラリ ファイルを生成する部分を、これらのコンテンツが含まれる公開場所 /data/php_proto/ フォルダーに置きました。

drwsrwxr-x 2 yanruitao ユーザー 4096 10 月 14 日 17:05 Dmp

-rwxrwxr-x 1 yanruitao ユーザー 472 10 月 10 日 17:59 dmp.proto
drwsrwxr-x 2 yanruitao ユーザー 4096 10 月 10 日 17:54 ProtobufCompiler
-rwxrwxr-x 1 yanruitao ユーザー 2969 2015 年 3 月 9 日 protoc-php.php

最後の 2 つは必要で、pb プロトコル実装クラス ライブラリ ファイルを生成するときに使用されます。最初の 2 つは単純な例であり、以下のように非常に簡単に使用できます。

php protoc-php.php -n --psr dmp.proto //-n は名前空間を使用し、--psr は psr-4 標準を使用し、使用時に他のエラーが報告されます。

PHP 警告: file_put_contents(pb_proto_dmp.php): ストリームを開けませんでした: /data/php_proto/ProtobufCompiler/ProtobufParser.php の 309 行目で許可が拒否されました


同僚に尋ねられたとき、私は sudo を追加するだけで十分だと直接言いました。その結果、最初にインストールされた拡張機能が読み込めないという問題がさらに深刻になりました。

$yanruitao: php -i grep 'php.ini'

$yanruitao: sudo php -i grep 'php.ini'



2 人のユーザーは同じ構成ファイルをロードしません。通常のユーザーはファイル /usr/local/php/lib/php.ini をロードしますが、root ユーザーはファイル /etc/php.ini をロードします。この 2 つのファイルの内容は矛盾しています。ははは、すぐに /etc/php.ini をバックアップし、/usr/local/php/lib/php.ini を /etc/php.ini にコピーしました。コピーして使ってみたら、たくさんのエラーが報告されてショックを受けました:

PHP 警告: PHP スタートアップ: ダイナミック ライブラリ '/usr/local/php/lib/php/extensions/no-debug-non-zts-20100525/web_stub_cntl.so' - /usr/local/php/lib/ をロードできませんphp/extensions/no-debug-non-zts-20100525/web_stub_cntl.so: 未定義のシンボル: 0 行目の不明の zend_new_interned_string

警告: PHP スタートアップ: ダイナミック ライブラリ '/usr/local/php/lib/php/extensions/no-debug-non-zts-20100525/web_stub_cntl.so' - /usr/local/php/lib/php をロードできません/extensions/no-debug-non-zts-20100525/web_stub_cntl.so: 未定義のシンボル: zend_new_interned_string 行 0 の不明

PHP 警告: PHP スタートアップ: テスト: モジュールを初期化できません

モジュール API=20100525 でコンパイルされたモジュール
モジュール API=20090626 でコンパイルされた PHP
これらのオプションは一致する必要があります
ライン0の不明です

警告: PHP スタートアップ: テスト: モジュールを初期化できません

モジュール API=20100525 でコンパイルされたモジュール

モジュール API=20090626 でコンパイルされた PHP
これらのオプションは一致する必要があります
ライン0の不明です
PHP 警告: PHP 起動: ダイナミック ライブラリ '/usr/local/php/lib/php/extensions/no-debug-non-zts-20100525/protobuf.so' - /usr/local/php/lib/php をロードできません/extensions/no-debug-non-zts-20100525/protobuf.so: 未定義のシンボル: zend_new_interned_string (行 0 に不明)

警告: PHP スタートアップ: ダイナミック ライブラリ '/usr/local/php/lib/php/extensions/no-debug-non-zts-20100525/protobuf.so' - /usr/local/php/lib/php をロードできません/extensions/no-debug-non-zts-20100525/protobuf.so: 未定義のシンボル: zend_new_interned_string (行 0 に不明)

PHP 警告: PHP 起動: ダイナミック ライブラリ '/usr/local/php/lib/php/extensions/no-debug-non-zts-20100525/imagick.so' - /usr/local/php/lib/php をロードできません/extensions/no-debug-non-zts-20100525/imagick.so: 未定義のシンボル: zend_new_interned_string (行 0 に不明)


警告: PHP スタートアップ: ダイナミック ライブラリ '/usr/local/php/lib/php/extensions/no-debug-non-zts-20100525/imagick.so' - /usr/local/php/lib/php をロードできません/extensions/no-debug-non-zts-20100525/imagick.so: 未定義のシンボル: zend_new_interned_string (行 0 に不明)

PHP 警告: PHP 起動: ダイナミック ライブラリ '/data/boss/phpredis-develop/modules/redis.so' をロードできません - /data/boss/phpredis-develop/modules/redis.so: 未定義のシンボル: zend_new_interned_string が不明です0行目


警告: PHP スタートアップ: ダイナミック ライブラリ '/data/boss/phpredis-develop/modules/redis.so' をロードできません - /data/boss/phpredis-develop/modules/redis.so: 未定義のシンボル: zend_new_interned_string が不明です0行目

PHP 警告: PHP 起動: ダイナミック ライブラリ '/usr/local/php/lib/php/extensions/no-debug-non-zts-20100525/curl.so' - /usr/local/php/lib/php をロードできません/extensions/no-debug-non-zts-20100525/curl.so: 共有オブジェクト ファイルを開けません: 0 行目の不明にそのようなファイルまたはディレクトリはありません

警告: PHP スタートアップ: ダイナミック ライブラリ '/usr/local/php/lib/php/extensions/no-debug-non-zts-20100525/curl.so' - /usr/local/php/lib/php をロードできません/extensions/no-debug-non-zts-20100525/curl.so: 共有オブジェクト ファイルを開けません: 0 行目の不明にそのようなファイルまたはディレクトリはありません
PHP 警告: PHP 起動: ダイナミック ライブラリ「/usr/local/php/lib/php/extensions/no-debug-non-zts-20100525/fileinfo.so」をロードできません - /usr/local/php/lib/php /extensions/no-debug-non-zts-20100525/fileinfo.so: 共有オブジェクト ファイルを開けません: 0 行目の不明にそのようなファイルまたはディレクトリはありません

警告: PHP スタートアップ: ダイナミック ライブラリ '/usr/local/php/lib/php/extensions/no-debug-non-zts-20100525/fileinfo.so' - /usr/local/php/lib/php をロードできません/extensions/no-debug-non-zts-20100525/fileinfo.so: 共有オブジェクト ファイルを開けません: 0 行目の不明にそのようなファイルまたはディレクトリはありません
PHP 警告: PHP 起動: ダイナミック ライブラリ「/usr/local/php/lib/php/extensions/no-debug-non-zts-20100525/gd.so」をロードできません - /usr/local/php/lib/php /extensions/no-debug-non-zts-20100525/gd.so: 共有オブジェクト ファイルを開けません: 0 行目の不明にそのようなファイルまたはディレクトリはありません

警告: PHP スタートアップ: ダイナミック ライブラリ '/usr/local/php/lib/php/extensions/no-debug-non-zts-20100525/gd.so' - /usr/local/php/lib/php をロードできません/extensions/no-debug-non-zts-20100525/gd.so: 共有オブジェクト ファイルを開けません: 0 行目の不明にそのようなファイルまたはディレクトリはありません
PHP 警告: PHP 起動: 動的ライブラリ「/usr/local/php/lib/php/extensions/no-debug-non-zts-20100525/json.so」をロードできません - /usr/local/php/lib/php /extensions/no-debug-non-zts-20100525/json.so: 共有オブジェクト ファイルを開けません: 0 行目の不明にそのようなファイルまたはディレクトリはありません

警告: PHP スタートアップ: ダイナミック ライブラリ '/usr/local/php/lib/php/extensions/no-debug-non-zts-20100525/json.so' - /usr/local/php/lib/php をロードできません/extensions/no-debug-non-zts-20100525/json.so: 共有オブジェクト ファイルを開けません: 0 行目の不明にそのようなファイルまたはディレクトリはありません
PHP 警告: PHP 起動: 動的ライブラリ「/usr/local/php/lib/php/extensions/no-debug-non-zts-20100525/phar.so」をロードできません - /usr/local/php/lib/php /extensions/no-debug-non-zts-20100525/phar.so: 共有オブジェクト ファイルを開けません: 0 行目の不明にそのようなファイルまたはディレクトリはありません

警告: PHP スタートアップ: ダイナミック ライブラリ '/usr/local/php/lib/php/extensions/no-debug-non-zts-20100525/phar.so' - /usr/local/php/lib/php をロードできません/extensions/no-debug-non-zts-20100525/phar.so: 共有オブジェクト ファイルを開けません: 0 行目の不明にそのようなファイルまたはディレクトリはありません
PHP 警告: PHP 起動: ダイナミック ライブラリ「/data/boss/phpredis-develop/modules/redis.so」をロードできません - /data/boss/phpredis-develop/modules/redis.so: 未定義のシンボル: zend_new_interned_string が不明です0行目

警告: PHP スタートアップ: ダイナミック ライブラリ '/data/boss/phpredis-develop/modules/redis.so' をロードできません - /data/boss/phpredis-develop/modules/redis.so: 未定義のシンボル: zend_new_interned_string が不明です0行目
PHP 警告: PHP 起動: ダイナミック ライブラリ「/usr/local/php/lib/php/extensions/no-debug-non-zts-20100525/zip.so」をロードできません - /usr/local/php/lib/php /extensions/no-debug-non-zts-20100525/zip.so: 共有オブジェクト ファイルを開けません: 0 行目の不明にそのようなファイルまたはディレクトリはありません

警告: PHP スタートアップ: ダイナミック ライブラリ '/usr/local/php/lib/php/extensions/no-debug-non-zts-20100525/zip.so' - /usr/local/php/lib/php をロードできません/extensions/no-debug-non-zts-20100525/zip.so: 共有オブジェクト ファイルを開けません: 0 行目の不明にそのようなファイルまたはディレクトリはありません
protoc-php.php を実行するには protobuf 拡張機能がインストールされている必要があります

これは私は着ていません。

時間は過ぎ去りました、何の解決策も公開されませんでした、あるアプリケーションの解決策を破棄しました、修正/data/php_proto/文件の制限は0775で、他の通常のユーザーは直接使用できます、加sudoは使用しません(これは我的错,忘记修正文件夹权限了,这也让我发现了这个诡异的问题)

chmod -R 0775 /data/php_proto
これらの危険な発言を考慮すると、大部分は拡張の問題であり、拡張のインストールが失敗したり、拡張が存在しないこともあり、通常のユーザーには許可されますが、root ユーザーには実行できません。

root 用 php -i の時刻、配置ファイルの場所非 root 用の人が一致しない場所:

//非ルート


このディレクトリをスキャンして追加の .ini ファイルを探します => (なし)

追加の .ini ファイルが解析されました => (なし)

//ルート

このディレクトリをスキャンして追加の .ini ファイルを探します => /etc/php.d
追加の .ini ファイルが解析されました => /etc/php.d/curl.ini,
……
命名追加されたものは一样の構成文件怎么追加後の内容は不一样呢?
半日を経て、傷ついた場所の一部がこれに関係していることがわかったが、これも古い修復に到達していない。
root 用と非 root 用の php 実行可能ファイルは一致していません

root => /usr/bin/php
非 root => /usr/local/bin/php

これら 2 つのファイルで php -v を使用してみましたが、root ユーザーのバージョンが 5.3.3 で、root ユーザー以外のバージョンが 5.4.6 でした。ははは、誰が環境をデプロイしたのか混乱しました。人を騙すこと。

元の /usr/bin/php をバックアップし、/usr/local/bin/php をコピーして上書きしてみます。php -v を使用した後、バージョンは同じであり、php protoc を実行してもエラーは報告されません。 -php を再度実行すると、すべてが正常であることがわかり、問題は解決されました。

長い間苦労した結果、バージョンの問題であることが判明しました。

www.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/1061523.html技術記事 php cli 設定ファイルの問題の分析、はじめに 今日、他の人に protobuf の使い方を教えていたときに、偶然 php cli モードで奇妙な問題を発見し、解決策を見つけるのに長い時間がかかりました...
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。