- 浏览: 1613276 次
- 性别:
- 来自: 厦门
文章分类
- 全部博客 (603)
- T_java (145)
- T_script&ASP (51)
- T_C/C++ (25)
- T_PowerBuilder (11)
- T_Database (53)
- T_odoo (7)
- T_应用服务器 (50)
- T_专_条形码 (6)
- T_专_负载均衡器 (4)
- T_操作系统 (94)
- T_信息安全 (41)
- T_专_搜索引擎 (14)
- T_L_PHP (58)
- T_L_Delphi (18)
- T_L_.NET、C#、VisualStudio (25)
- T_L_Objective-C (6)
- T_移动开发 (53)
- T_网络 (109)
- T_大数据 (2)
- T_嵌入式 (2)
- T_小众技术 (24)
- T_未分类 (58)
- L_旅游印记 (1)
- L_生活随笔 (48)
- L_中国文化 (18)
- L_户外与生存 (0)
最新评论
-
csbean4004:
不知道哪传来得恶习,发帖子不好好发,故意弄错一些东西,很讨厌
让HTML5支持后置摄像头 -
withthewind:
终于找到一个可以用的了。。。
如何用VBA取得Word文档中的标题前面的序号 -
busbby:
兄弟,无法下载,说文件不完整
一个好用的Outlook ost格式文件转pst文件的工具 -
yijavakevin:
密码啊~解压密码多少?
一个二维条形码组件 -
vipbooks:
你给的那个链接根本无法下载,跳到官网看了下最新版12M,但点下 ...
十步以内完成精细web打印
这两天需要编译一个PHP扩展来实现特定的功能,参考了网上N多文章,最后发现两件宝贝,其一是php_screw,另外一件是Cygwin。
首先编译php_screw,以便有个感性的印象,编译通过没问题,然后自己试图往里增加一些代码,磕磕碰碰地最后也编译成功了。可是放到Apache上试用时,却经常出现内存读写异常,修修改改了好久还没无法解决。
于是,想自己重头开始做,参考php_screw往里一点点添代码,看看能不能解决问题。
根据网上教程,在Cygwin里用命令:
php ext_skel_win32.php --extname=mytest
生成测试用程序框架,然后直接编译框架,一切都很顺利,再往里增加一个功能函数,放到Apache测试,也都正常,但到了往下面两个函数:
PHP_MINIT_FUNCTION(mytest)
和
PHP_MSHUTDOWN_FUNCTION(mytest)
的 return SUCCESS 前面增加
CG(extended_info) = 1;
,然后再编译,则出现了编译错误:
Deleting intermediate files and output files for project 'mytest - Win32 Debug_TS'. --------------------Configuration: mytest - Win32 Debug_TS-------------------- Compiling... mytest.c Linking... Creating library Debug_TS/php_mytest.lib and object Debug_TS/php_mytest.exp mytest.obj : error LNK2001: unresolved external symbol _compiler_globals_id ..\..\Debug_TS/php_mytest.dll : fatal error LNK1120: 1 unresolved externals Error executing link.exe. Creating browse info file... php_mytest.dll - 2 error(s), 0 warning(s)
网上搜索了好久,我试了都不行,所以怀疑是编译器配置的问题,于是打开php_screw和mytest两个工程,对编译参数一项项比对,最后发现:
自动生成的编译参数如下Project --> Setting --> C/C++ -->Preprocessor definitions::
ZEND_DEBUG=1,WIN32,NDEBUG,_WINDOWS,_MBCS,_USRDLL,MYTEST_EXPORTS, COMPILE_DL_MYTEST,ZTS=1,ZEND_WIN32,PHP_WIN32,HAVE_MYTEST=1,LIBZEND_EXPORTS
而php_screw的对应参数则如下:
ZEND_DEBUG=0,WIN32,NDEBUG,_WINDOWS,_MBCS,_USRDLL,SCREW_EXPORTS, COMPILE_DL_SCREW, ZTS=1,ZEND_WIN32,PHP_WIN32,HAVE_SCREW=1
,对比可以发现:
1、自动生成框架的 ZEND_DEBUG=1, 而php_screw的 ZEND_DEBUG=0;
2、自动生成框架的参数中多一个 LIBZEND_EXPORTS ;
我于是对这两个参数分别测试:
1、把 ZEND_DEBUG=1 改成 ZEND_DEBUG=0,再编译,报错如下:
Deleting intermediate files and output files for project 'mytest - Win32 Debug_TS'. --------------------Configuration: mytest - Win32 Debug_TS-------------------- Compiling... mytest.c Linking... Creating library Debug_TS/php_mytest.lib and object Debug_TS/php_mytest.exp mytest.obj : error LNK2001: unresolved external symbol _compiler_globals_id ..\..\Debug_TS/php_mytest.dll : fatal error LNK1120: 1 unresolved externals Error executing link.exe. Creating browse info file... php_mytest.dll - 2 error(s), 0 warning(s)
2、再把 LIBZEND_EXPORTS 去掉,再编译,错误消失:
Deleting intermediate files and output files for project 'mytest - Win32 Debug_TS'. --------------------Configuration: mytest - Win32 Debug_TS-------------------- Compiling... mytest.c Linking... Creating library Debug_TS/php_mytest.lib and object Debug_TS/php_mytest.exp Creating browse info file... php_mytest.dll - 0 error(s), 0 warning(s)
3、再把 ZEND_DEBUG=0 重新改成 ZEND_DEBUG=1,再编译,无错:
Deleting intermediate files and output files for project 'mytest - Win32 Debug_TS'. --------------------Configuration: mytest - Win32 Debug_TS-------------------- Compiling... mytest.c Linking... Creating library Debug_TS/php_mytest.lib and object Debug_TS/php_mytest.exp Creating browse info file... php_mytest.dll - 0 error(s), 0 warning(s)
所以,问题是由于 LIBZEND_EXPORTS 参数引起的,但由于对VC不熟且对Zend API更面生的缘故,只能是知其然而不可知其所以然也;
发表评论
-
SpringBoot Fat Jar解压运行
2018-06-28 21:40 2264SpringBoot已经成为当前最流行的微服务 ... -
TeamViewer13+Patch
2018-05-13 22:19 3206下载地址: https://www.datafilehos ... -
在Ubuntu 18.04 Bionic Beaver上安装Wine
2018-05-04 15:41 2262目标 目标是在Ubuntu 18.04 Bio ... -
来算google的可视化编程工具——Blockly,不仅仅是玩具
2017-10-16 21:34 33165Blockly - 来自Google的可 ... -
Linux挂载阿里云对象存储OSS作为本地磁盘扩充空间备份网站
2017-09-25 08:54 1944p.s.挂载oss之后,使用rsync可以同步图片数据,非 ... -
Chrome核心的自定义浏览器
2017-07-04 17:19 832以Chrome为核心的自定义浏览器源代码,有时候可能用得到,保 ... -
十步以内完成精细web打印
2017-06-21 11:44 7392注意: 康虎云报表组 ... -
docker的一些使用技巧
2017-05-26 09:20 5631、如何以root用户进入一个正在运行的容器? docke ... -
Windows批处理中如何实现延时?
2017-05-12 20:56 1685Windows下批处理文件没有像Linux一样的Sleep函 ... -
浏览器端精准打印或套打组件
2017-01-18 13:05 6706注意: 康虎云报表 ... -
让ie6 7 8 9支持html5 websocket
2016-12-23 20:52 2324结果: 从github上的 web ... -
网站获取用户手机号码的方法、系统、客户端及服务器(坑爹的玩意儿)
2016-11-22 14:22 2291网站获取用户 ... -
Sql注入之sqlmap+dvwa实例演练
2016-10-27 16:27 1606Sql注入之sqlmap+dvwa实例演练 相信 ... -
在CentOS上安装Gitlab
2016-10-09 22:04 1150因为涉及的依赖多,所以新手在安装Gitlab时往往遇到不少障 ... -
Ubuntu16.04上安装MT7601网卡驱动(TL-W725N/W725N)
2016-09-15 23:01 0I suggest you get a temporary ... -
如何在palcedoler中放置图标
2016-09-10 09:52 646如何在H5的palceholder中设置一个图标? ... -
从头创建一个最小的CentOS Docker镜像
2016-08-12 17:26 5556一、从头创建一个CentOS的基础框架 首先安装好Cent ... -
一个下载youtube视频的Linux工具
2016-07-01 08:50 952我们要介绍工具是youtube-dl。这是一个跨平台的工具, ... -
Windown下最简安装nodejs和npm
2016-06-20 21:03 690Windown下最简安装nodejs和npm 一、下 ... -
另一个穿透内网的工具(类似ngrok)
2016-06-20 20:26 4844前段时间介绍过两种把内网端口映射到公网的工具:ngrok ...
相关推荐
总结起来,要在Windows上实现PHP 8.1或8.2与Swoole扩展的结合,并利用Hyperf框架,你需要: 1. 安装匹配版本的PHP 8.x。 2. 下载并安装Swoole扩展。 3. 使用Composer安装Hyperf框架。 4. 根据需求配置项目和系统环境...
除了手动安装,你还可以使用一些集成开发环境(IDE)或Web服务器软件的管理界面来添加和管理PHP扩展,如XAMPP控制面板中的“PHP Extensions”选项。这种方法通常更简单,但可能不适用于所有情况。 总之,为Windows...
在 PHP 开发中,sodium 扩展是一个非常重要的组件,它提供了高级的加密和解密功能。在 PHP7.2.6 中,安装 sodium 扩展需要先安装 libsodium 依赖项,并且需要编译 PHP 源代码来生成 sodium 扩展模块。 首先,需要...
PHP扩展通常位于PHP的ZEND层,即在PHP虚拟机执行层之上,它们可以直接操作ZEND_opcodes,提供新的数据类型、函数和类。扩展可以增加性能,因为它们直接在C级别运行,避免了PHP解释器的额外开销。 2.3 PHP扩展的方式...
2. **Cygwin-setup-x86.exe**:Cygwin是一个提供Linux环境的工具,用于在Windows系统上运行,对于在Windows上编译PHP扩展非常有用。安装Cygwin后,你可以获取GCC编译器和其他必需的开发工具,以便编译源代码形式的...
PHP扩展安装与配置 在Windows环境下,安装ZBarCodeImage扩展通常需要以下步骤: - 下载预编译的二进制扩展文件(如:zbarcodeimage.dll)。 - 将该文件复制到PHP的`ext`目录下。 - 修改php.ini文件,添加`...
`php_amqp`扩展为Windows上的PHP开发者提供了与RabbitMQ集成的途径,允许他们在PHP应用中充分利用消息队列的优点,如异步处理、解耦和容错。确保正确选择与PHP环境匹配的扩展版本,并正确安装和配置,是成功使用的...
本资源合集专注于PHP 5.6版本在Windows NTX操作系统上的配置,提供了必要的组件来实现这一目标。 首先,Redis-x64-2.8.2104.zip是Redis服务器的二进制版本,适用于64位操作系统。安装Redis时,你需要解压此文件到一...
在Windows上安装和配置protobuf扩展可能会有一些特殊步骤,比如需要正确配置系统路径,安装Visual C++ Redistributable,以及确保PHP的扩展目录包含正确编译的二进制文件。 在提供的压缩包子文件"php_protobuf.dll"...
文件,找到`extension=...`行,添加`extension=sg11.so`(在Linux上)或`extension=php_sg11.dll`(在Windows上)。 4. 保存配置并重启PHP服务,使更改生效。 在使用SG11扩展前,建议先阅读官方文档或相关教程,...
在PHP扩展中,正确地分配和释放内存是至关重要的。扩展需要使用PHP提供的内存管理函数,如emalloc()和efree(),来确保内存的有效使用和避免内存泄漏。 **5. 建立构建环境** 开发扩展需要配置合适的构建环境,包括...
首先,确保你的系统满足编译PHP扩展所需的依赖,如`php-dev`、`zlib-dev`等。运行脚本并指定你的PHP版本和线程安全性,例如: ```bash ./swoole-compiler-loader.sh --php-version=7.4 --thread-safe ``` 安装完成...
在Windows上配置PHP环境时,安装并启用APCu扩展是非常重要的一步,因为这能够缓存编译后的PHP代码,减少每次请求时的解析时间,从而提高整体性能。`php_apcu.dll`是APCu扩展在Windows环境下运行所需的核心组件,它...
Swoole是一个高性能的PHP扩展,专为网络并发设计,提供了异步多线程服务器、异步TCP/UDP网络客户端、HTTP服务器、WebSocket服务器、MySQL协议服务器等功能。它极大地提升了PHP处理高并发、长连接场景下的性能,使得...
不同版本的编译器可能导致PHP与某些特定的库或组件兼容性问题,因此在选择合适的PHP版本时,需要确保其与所使用的其他软件(如Apache、Nginx等)的编译器版本匹配。 4. Windows(x86/x64): x86和x64分别代表32位...
3. 在编译PHP7的Sphinx扩展时,确保指定了正确的libsphinxclient路径,如`--with-sphinxclient=/path/to/libsphinxclient`。 总结,PHP7的Sphinx扩展是实现高效全文搜索的关键组件,尤其在处理大量数据和中文文本时...
为了编译PHP扩展,我们需要php-devel包: ``` sudo yum install php-devel ``` 5. **下载PHP cURL扩展** 下载PHP的cURL扩展源代码。你可以从PHP官方网站获取最新的版本,或者使用wget命令直接下载: ``` ...
标题 "php5.6关于redis在windows下的包" 指的是在Windows操作系统上使用PHP 5.6版本与Redis数据库交互的一种扩展包。Redis是一个高性能的键值存储系统,常用于缓存、消息队列等场景。在Windows环境下,由于PHP原生不...
在执行上述命令时,可能会遇到一些错误提示,例如找不到必要的头文件或库文件,此时可以通过安装相应的开发包来解决这些问题,例如: ```bash sudo apt-get install libxml2 libxml2-dev sudo apt-get install ...