PHP扩展迁移为PHP7扩展兼容性问题记录,php7兼容性
PHP扩展迁移为PHP7扩展兼容性问题记录,php7兼容性
PHP7扩展编写的时候,提供的一些内核方法和之前的PHP之前的版本并不能完全兼容。有不少方法参数做了调整。下面是在迁移过程中遇到的一些问题。记录下来,避免大家再踩坑。
add_assoc_stringl
方法参数改为四个。
add_assoc_stringl(parray, key, value, value_len);
迁移的时候,只要把最后一个参数删除即可。
add_assoc_string
方法参数从四个改为了三个。
add_assoc_stringl(parray, key, value);
迁移的时候,只要把最后一个参数删除即可。
add_next_index_stringl
方法参数从四个改为了三个。
add_next_index_stringl(parray, value, value_len);
迁移的时候,只要把最后一个参数删除即可。
add_next_index_string
方法参数从三个改为了两个。
add_next_index_string(parray, value);
迁移的时候,只要把最后一个参数删除即可。
RETURN_STRINGL
方法参数从三个改为了二个。
RETURN_STRINGL(value, length);
迁移的时候,只要把最后一个参数删除即可。
错误:‘INT64_MAX' 在此作用域中尚未声明
原因为深入研究。在 #include "php.h" 上面加上一行
#include <stdint.h> #ifndef INT64_MAX # define INT64_MAX INT64_C( 9223372036854775807) #endif #ifndef INT64_MIN # define INT64_MIN (-INT64_C( 9223372036854775807)-1) #endif
解决。
创建类
可以参考mysqli扩展mysqli.c文件中的 mysqli_objects_new 方法。
变量声明从堆上分配,改为栈上分配。
如,原先代码为
zval* sarray_l; ALLOC_INIT_ZVAL(sarray_l); array_init(sarray_l);
改为
zval sarray_l; array_init(&sarray_l); zend_hash_get_current_key_ex
方法参数从六个改为了四个。
ZEND_API int ZEND_FASTCALL zend_hash_get_current_key_ex(const HashTable *ht, zend_string **str_index, zend_ulong *num_index, HashPosition *pos);
迁移的时候,只要把第三个和第五个参数删除即可。
错误:‘Z_TYPE_PP' 在此作用域中尚未声明
已经没有Z_TYPE_PP宏,只有Z_TYPE 和Z_TYPE_P宏方法的定义。
h2错误:不能从 ‘zend_string*' 转换到 ‘const char*'
PHP7中对于字符串的处理使用zend_string进行存储。如果想把zend_string 转为 const char 。需要使用 ZSTR_VAL()宏方法。代码如下:
zend_string *str; char *sptr; ..... sptr = ZSTR_VAL(str);
错误:‘IS_BOOL' 在此作用域中尚未声明
已经没有IS_BOOL类型。而是分为了IS_TRUE 和 IS_FALSE.
错误:‘Z_BVAL' 在此作用域中尚未声明
已经没有Z_BVAL宏。但是可以通过类型是否是 IS_TRUE和IS_FALSE来判定。
如果类型为IS_TRUE,则值为true。如果类型为IS_FALSE则值为false。
错误:‘zend_object_store_get_object' 在此作用域中尚未声明
增加如下代码:
static inline hsf_object *hsf_fetch_object(zend_object *obj) /* {{{ */ { return (user_object *)((char*)(obj) - XtOffsetOf(user_object, std)); } /* }}} */ #define Z_USEROBJ_P(zv) hsf_fetch_object(Z_OBJ_P((zv)))
然后把zend_object_store_get_object改为Z_USEROBJ_P即可。
注意,user_object是你定义的结构体。
以上所述是针对PHP扩展迁移为PHP7扩展兼容性问题记录的相关叙述,希望对大家有所帮助。
您可能感兴趣的文章:
- ECshop 迁移到 PHP7版本时遇到的兼容性问题

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック











PHP 関数の機能を拡張するには、拡張機能とサードパーティのモジュールを使用できます。拡張機能は、pecl パッケージ マネージャーを通じてインストールおよび有効化できる追加の関数とクラスを提供します。サードパーティ モジュールは特定の機能を提供し、Composer パッケージ マネージャーを通じてインストールできます。実際の例には、拡張機能を使用して複雑な JSON データを解析したり、モジュールを使用してデータを検証したりすることが含まれます。

1.UncaughtError:Calltoundependentfunctionmb_strlen(); 上記のエラーが発生した場合、mbstring 拡張機能がインストールされていないことを意味します; 2. PHP インストール ディレクトリ cd/temp001/php-7.1.0/ext/mbstring に入ります 3. phpize( /usr/local/bin /phpize または /usr/local/php7-abel001/bin/phpize) コマンドを使用して、php 拡張機能 4../configure--with-php-config=/usr/local/php7-abel をインストールします。

Go 言語は Linux システムとの互換性が非常に優れており、さまざまな Linux ディストリビューション上でシームレスに実行でき、さまざまなアーキテクチャのプロセッサをサポートします。この記事では、Linux システムにおける Go 言語の互換性を紹介し、具体的なコード例を通じてその強力な適用性を示します。 1. Go 言語環境をインストールする Linux システムへの Go 言語環境のインストールは非常に簡単で、対応する Go バイナリ パッケージをダウンロードし、関連する環境変数を設定するだけです。 Ubuntu システムに Go 言語をインストールする手順は次のとおりです。

現代技術の継続的な発展により、ワイヤレス Bluetooth ヘッドセットは人々の日常生活に欠かせないものになりました。ワイヤレスヘッドホンの登場により両手が解放され、音楽や通話などのエンターテインメントをより自由に楽しめるようになりました。ただし、飛行機に乗るときは、携帯電話を機内モードにするように求められることがよくあります。そこで質問は、機内モードで Bluetooth ヘッドフォンを使用できるかということです。この記事では、この疑問について考察していきます。まず、機内モードの機能と意味を理解しましょう。機内モードは携帯電話の特別なモードです

1. プログラムを右クリックし、開いたプロパティウィンドウに [互換性] タブがないことを確認します。 2. Win10 デスクトップで、デスクトップ左下のスタートボタンを右クリックし、ポップアップメニューの[ファイル名を指定して実行]を選択します。 3. Win10 の実行ウィンドウが開きます。ウィンドウに「gpedit.msc」と入力し、[OK] ボタンをクリックします。 4. [ローカル グループ ポリシー エディター] ウィンドウが開くので、[コンピューターの構成/管理用テンプレート/Windows コンポーネント] メニュー項目をクリックします。 5. 開いた Windows コンポーネント メニューで [アプリケーション互換性] メニュー項目を見つけ、右側のウィンドウで [プログラム互換性プロパティ ページの削除] 設定項目を見つけます。 6. 設定項目を右クリックし、ポップアップメニューで

PHP 7.0 でインストールされているプラグインが表示されない問題を解決するには: プラグインの設定を確認し、プラグインを有効にします。 PHP を再起動して、構成の変更を適用します。プラグイン ファイルの権限をチェックして、それらが正しいことを確認します。不足している依存関係をインストールして、プラグインが適切に機能することを確認します。他のすべての手順が失敗した場合は、PHP を再構築します。他に考えられる原因としては、プラグインのバージョンに互換性がない、間違ったバージョンをロードしている、PHP 構成の問題などが挙げられます。

一部のユーザーは、d ドライブの容量が足りないと感じて、d ドライブの容量を拡張したいと考えていますが、操作中に、win11d ドライブを拡張できず、拡張ボリュームが灰色になっていることがわかります。ディスク容量が不足しています。以下の解決策を見てみましょう。 win11d ディスクを拡張できない理由: 1. 容量が不足しています 1. まず、d ディスクを拡張するには、図に示すように、ディスクに「空き容量」があることを確認する必要があります。 2. このように空きスペースがなければ、当然拡張のしようがありません。 3. この時点で D ドライブを拡張したい場合は、他のディスクを見つけて右クリックし、「ボリュームの圧縮」を選択します。 4. 拡張して圧縮するスペースを入力し、「OK」をクリックして、利用可能なスペース。 2. ディスクは隣接していません。 1. ディスクを拡張するには、次のことができます。

Win11 をインストールするときに、多くのバージョンから選択する必要があることに多くの友人が気づきました。どのバージョンを選択すればよいかわかりません。一般的に言えば、Windows11pro バージョンをダウンロードすることを選択しますが、他のバージョンにも独自の特徴があります。見てみましょう一緒に見てみましょう。 win11 システムのどのバージョンが最適ですか: 回答: Professional バージョンを選択するのが最善ですが、他のバージョンにも独自の特徴があります. 1. win11 professional バージョンをインストールするシステムを選択するときに、windows11pro を選択します。 2. win11 professional バージョンを直接ダウンロードしたい場合は、このサイトからダウンロードすることもできます。 3. win11 のプロフェッショナル バージョンは、現在 win11 で最も包括的な機能を備えており、事前に win11 を十分に体験したいユーザーに非常に適しています。勝つ
