标签: php-extension

Win32 PHP扩展开发

为PHP创建可加载的DLL模块扩展的第一步是什么,以便在Windows上为我自己的库创建本机支持?

是否需要在Windows上重新编译PHP?需要什么工具?我不想使用exec和命令行.

php dll module php-extension

6
推荐指数
1
解决办法
3153
查看次数

有人在Windows x64上为php 5.2.x编译了一个rabbitmq/amqp库

我正在尝试从我的Windows X64开发机器上的php(5.2.x)脚本向RabbitMQ发布消息.

问题是我没有找到任何PHP的DLL扩展.我的同事实际上正在尝试构建它(参见.如何使用cygwin/mingw在Windows上编译PHP扩展?),但没有成功:(.

有谁知道我在哪里可以找到php(5.2.x)的有效/工作RabbitMQ dll扩展?或者,如果某人有经验正确而迅速地做到这一点肯定会非常有帮助.

php amqp php-extension rabbitmq

6
推荐指数
1
解决办法
1584
查看次数

PHP扩展与库(可以转换)

一些php wamp/lamp包附带php扩展,如php_amf,php_db,php_gd2,我只需要激活扩展,或者如果默认情况下没有安装扩展.

我的问题一般是,这些扩展如何与图书馆不同?具体而言我想知道,扩展是否可以变成一个加载到项目本身的库?目标是调用库而无需像php扩展需要的特殊安装.有时,当您使用共享主机时,您没有足够的权限来安装新的扩展.

php php-extension libraries

6
推荐指数
1
解决办法
1656
查看次数

如何使用debug,TS编译PHP 5.3.6的php扩展

我试图创建一些PHP扩展.

对于第一个我编php 5.3.6--enable-debug --enable-maintainer-zts.然后我停止了我的扩展并使用标准程序

phpize
./configure --with-EXTNAME
make
Run Code Online (Sandbox Code Playgroud)

然后复制extname.so到我的php扩展目录,并进行更改php.ini

当我尝试从cli使用php时出现错误

Unable to initialize module
Module compiled with build ID=API20090626,NTS
PHP    compiled with build ID=API20090626,TS,debug
Run Code Online (Sandbox Code Playgroud)

当我尝试

./configure --enable-debug --enable-maintainer-zts
Run Code Online (Sandbox Code Playgroud)

对于扩展,我收到警告,配置脚本无法识别这些选项.

那么,我如何编译我的扩展以使用PHP编译我上面描述的选项编译而无需重新编译php本身?

php php-extension

6
推荐指数
1
解决办法
6096
查看次数

何时释放PHP扩展中的内存?

我想在PHP扩展中创建并返回一个数组数组.根据我的理解,我应该使用数组元素分配空间emalloc(),但我不明白的是什么时候适合释放它.我有一个类似于这个的PHP函数:

PHP_FUNCTION(test)
{
    int i;
    zval **pt = emalloc(sizeof(zval*) * 10);

    array_init(return_value);

    for (i = 0; i < 10; ++i) {
        MAKE_STD_ZVAL(pt[i]);
        array_init(pt[i]);
        add_index_double(pt[i], 0, 1);
        add_index_zval(return_value, i, pt[i]);
    }
}
Run Code Online (Sandbox Code Playgroud)

我应该在哪里释放分配的内存pt

c php-extension

6
推荐指数
1
解决办法
1387
查看次数

分发用C编写的PHP扩展的最简单方法是什么

我为djondb创建了一个扩展,它是一个C++库的包装器,我编译了它,可以从djondb网站下载,我不是PHP专家,我一直遇到一些问题.发布,主要是我意识到我需要为每个平台做每个编译并为每个平台创建一个安装程序,这很费时,我想要的是分享源代码并允许用户以最简单的方式安装它,

我已经尝试过的:

  1. 使用phpize,configure,make,sudo make install用户可以在Linux和Mac上轻松安装库,这个问题是用户需要在他们的计算机上安装g ++,make等,而这个安装过程不会在Windows上工作.
  2. 编译每个平台(Linux x86,x64,Mac,Windows等),并将每个tar.gz上传到站点,用户下载它并将每个文件放在正确的文件夹中.这里的问题是配置过于手动,用户往往会错过一些步骤,而且用户不友好.另一个问题是我需要使用虚拟机编译每个版本,这很费时间.(现在我要包含PHP 5.3和5.4的版本,这意味着要创建所有二进制文件的8个虚拟机)
  3. 我试图在PEAR上创建一个帐户,但注册屏幕总是说我不需要一个帐户用于我正在创建的目的...(似乎这是PEAR系统中的常见问题,但没有找到如何创建帐户建议包裹).
  4. PECL上有一个提案,但没有人回复邮件列表,似乎也很常见.

所以我现在停留在1和2种分发方式,分发使用C++以用户友好的方式创建并易于安装的PHP扩展的最佳方式是什么?

提前感谢,如果您对项目的结构方式或phpize/configure/make过程的完整说明有更多疑问,可以在https://github.com/djondb/djondb_phpext查看项目代码.

php c++ wrapper php-extension

6
推荐指数
1
解决办法
325
查看次数

试图在Windows x64上运行PHP 5.4.3上的想象力

我有Windows 7 64位,PHP 5.4.3通过WAMP 2.2和imagick(ImageMagick-6.8.3-9-Q16-x64-dll.exe)安装.我试图从很多来源使用php的dread of imagick但是所有这些都在apache_error.log中给出了这个错误:

PHP Warning:  PHP Startup: Unable to load dynamic library 'c:/wamp/bin/php/php5.4.3/ext/php_imagick.dll' - %1 is not a valid Win32 application.\r\n in Unknown on line 0
Run Code Online (Sandbox Code Playgroud)

有关如何解决这个问题的任何想法?

php imagick php-extension

6
推荐指数
1
解决办法
2万
查看次数

在xampp中添加Imagick

我已经按照以下步骤操作,http://bytehash.appspot.com/2012/02/Installing-imagick-for-php-in-windows-under-xampp我已经下载了想象力的dll文件,并将其添加到xampp/php/ext文件夹中并包含如下:extension=php_imagick_ts.dll.我还安装了imagemagick并且可以确认它已安装,因为我运行了以下命令:

C:\>convert -version
Version: ImageMagick 6.8.6-8 20
Copyright: Copyright (C) 1999-2
Features: DPC OpenMP
Delegates: bzlib djvu fftw font
ngo png ps tiff webp x xml zlib
Run Code Online (Sandbox Code Playgroud)

当我通过xampp控制面板重启apache时出现以下错误:

the procedure entry point php_checkuid_ex could not be located in the dynamic link library php5ts.dll
Run Code Online (Sandbox Code Playgroud)

并在以下错误消息后继续:

PHP Startup: Unable to load dynamic library "C:\xampp\php\ext\php_imagick_ts.dll" - The specified procedure could not be found
Run Code Online (Sandbox Code Playgroud)

如果在此消息之后我尝试复制并粘贴动态链接库位置 - C:\xampp\php\ext\php_imagick_ts.dll并将其粘贴到文档地址栏中,它会尝试打开文件

有没有人遇到这个错误?因为我在尝试安装msql3库或只是简单地取消注释php.ini文件中的一些其他扩展时遇到了同样的问题

任何建议都会很棒.谢谢

php apache xampp imagick php-extension

6
推荐指数
1
解决办法
7729
查看次数

phprediss扩展无法正常工作,无法加载'redis.so'

我安装了nginx,php,php-fpm,php-pecl-redis.所有这些都有效,但最后一个有效.

当我跑步时/usr/sbin/php-fpm,我得到了这个:

PHP警告:PHP启动:无法加载动态库'/usr/lib/php/modules/redis.so' - /usr/lib/php/modules/redis.so:未定义符号:第0行未知的igbinary_unserialize

我不知道"igbnary_unserialize"是什么意思以及如何解决它.

我检查了正确路径下的redis.so文件.我添加extension=redis.so到"php.ini"

php版本:5.3.3 phpredis版本:2.2.7

php-extension redis phpredis

6
推荐指数
3
解决办法
8550
查看次数

Zend:如何在PHP 7中正确破坏自定义对象?

我正在学习PHP扩展编写,以便使一些旧的扩展与PHP 7一起工作.

我试图从http://devzone.zend.com/1435/wrapping-c-classes-in-a-php-extension/修改示例扩展,但在破坏自定义对象时它会导致段错误.所有其他功能正常工作.(在我的代码中,汽车被BDict取代.)

这是我的代码:

#define Z_BDICT_OBJ_P(zv) php_bdict_object_fetch_object(Z_OBJ_P(zv))

zend_object_handlers bdict_object_handlers;

typedef struct _bdict_object {
    BDict *bdict_data;
    zend_object std;
} bdict_object;

zend_class_entry *bdict_ce;

static void bdict_free_storage(zend_object *object TSRMLS_DC)
{
    bdict_object *intern = (bdict_object *)object;

    // ***Both the following two lines will cause segfault***
    delete intern->bdict_data;
    zend_object_std_dtor(&intern->std TSRMLS_CC);
}

zend_object * bdict_object_new(zend_class_entry *ce TSRMLS_DC)
{
    bdict_object *intern = (bdict_object *)ecalloc(1,
            sizeof(bdict_object) +
            zend_object_properties_size(ce));

    zend_object_std_init(&intern->std, ce TSRMLS_CC);
    object_properties_init(&intern->std, ce);

    intern->std.handlers = &bdict_object_handlers;

    return &intern->std;
}

static inline bdict_object * php_bdict_object_fetch_object(zend_object *obj)
{ …
Run Code Online (Sandbox Code Playgroud)

php c php-extension php-internals php-7

6
推荐指数
1
解决办法
741
查看次数

标签 统计

php-extension ×10

php ×8

c ×2

imagick ×2

amqp ×1

apache ×1

c++ ×1

dll ×1

libraries ×1

module ×1

php-7 ×1

php-internals ×1

phpredis ×1

rabbitmq ×1

redis ×1

wrapper ×1

xampp ×1