标签: php-extension

将Zval转换为char*

我想将Zval转换为char*.我如何在我的PHP扩展中这样做?

php interpreter php-extension

5
推荐指数
1
解决办法
2854
查看次数

使用C++进行PHP扩展

我最近开始考虑编写PHP扩展,并阅读了本文,其中介绍了使用C++构建扩展的起点.当我开始定制时,我遇到了一些试图将一些功能拆分成单独文件的故障.一切都编译和链接没有问题,但当我尝试实际使用扩展时发生错误.确切的信息是:

$ php -dextension=test.so -r "var_dump( new Test );"
php: symbol lookup error: /etc/php/ext/test.so: undefined symbol: _ZN9ContainerI4TestEC1EP17_zend_class_entry
Run Code Online (Sandbox Code Playgroud)

我在两台计算机上试过这个并且都遇到了同样的问题.我知道它找不到Container构造函数的实际实现,但我不知道如何让它在正确的位置查找.

在发布这里之前,我已经尝试尽可能多地减少了绒毛,但是在php界面代码中还有很多瑕疵.代码如下:

config.m4中:

PHP_ARG_ENABLE(test,
    [Whether to enable the "test" extension],
    [  --enable-test      Enable "test" extension support])

if test $PHP_TEST != "no"; then
    PHP_REQUIRE_CXX()
    PHP_SUBST(TEST_SHARED_LIBADD)
    PHP_ADD_LIBRARY(stdc++, 1, TEST_SHARED_LIBADD)
    PHP_NEW_EXTENSION(test, interface.cpp internals.cpp, $ext_shared)
fi
Run Code Online (Sandbox Code Playgroud)

interface.h:

#ifndef INTERFACE_H_
   #define INTERFACE_H_
   #define PHP_TEST_EXTNAME  "test"
   #define PHP_TEST_EXTVER   "0.1"
   #ifdef HAVE_CONFIG_H
      #include "config.h"
   #endif
#endif
Run Code Online (Sandbox Code Playgroud)

interface.cpp:

#include "interface.h"
#include "internals.h"
#include "php.h"

class Test {}; 

extern zend_module_entry …
Run Code Online (Sandbox Code Playgroud)

php c++ php-extension

5
推荐指数
1
解决办法
2352
查看次数

wrap_newBundle不可用SWIG和webpay

我想webpay在我当地设置

  1. 已安装SWIG
  2. 添加了webpay扩展名php.ini

然后我尝试执行test.php它显示以下错误:

--------error while opening file [libwebpayclient.so]--------
<html>
<p> Starting webpay Transaction </p>
 wrap_newBundle not available 
Run Code Online (Sandbox Code Playgroud)

任何的想法?

php swig php-extension

5
推荐指数
1
解决办法
368
查看次数

使用SSH2 pecl扩展为Windows编译PHP的问题

首先,我不是程序员.我是一名网络管理员,他被要求为启用了SSH2的网页设计师编译PHP.

我一直在按照这个步骤编译PHP for Windows:https: //wiki.php.net/internals/windows/stepbystepbuild

要编译,我正在使用:Microsoft Visual C++ Studio 2008 Express Microsoft Windows SDK 6.1

我已经下载了SSH2所需的所有必需的和库.我已经提取并将它们放在'deps'文件夹中.我还下载了SSH2扩展代码并将其放在我在'x86'目录中创建的'pecl'文件夹中.

看起来编译器没有找到我添加的库.任何帮助将不胜感激!谢谢!

以下是尝试使用以下命令进行编译时出现的一些错误:

C:\php-sdk\php53dev\vc9\x86\php5.3-201107071830>configure --enable-cli --with-ss
h2
Run Code Online (Sandbox Code Playgroud)
Checking for library libjpeg_a.lib;libjpeg.lib ... <not found>
WARNING: gd not enabled; libraries and headers not found

Checking for zlib.h ...  <not found>
Checking for zlib.h ...  <not found>
WARNING: zip not enabled; libraries and headers not found


Checking for library libiconv_a.lib ... <not found>
Checking for library libiconv.lib ... <not found>
Checking for library …
Run Code Online (Sandbox Code Playgroud)

php windows ssh compilation php-extension

5
推荐指数
1
解决办法
2821
查看次数

如何使用php5和apache2在debian上安装soap.so扩展?

我在apache2中有一个带有php5的debian服务器,我想使用soap扩展.

我安装了soap扩展# sudo apt-get install php-soap,
我修改了php.ini extension=php_soap.so
并重置了apache.

但我检查phpinfo和肥皂扩展不在phpinfo.此外,我在服务器上搜索soap.so文件,它没有出现.

谢谢你,对不起我的英语

php soap apache2 php-extension

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

如何使ZEND_BEGIN_ARG_INFO_EX控制参数数量,传递给PHP扩展?

我正在开发一个PHP扩展,使用C.到目前为止,我正在研究正确的参数验证,从PHP用户空间传递给扩展的函数.

该宏ZEND_BEGIN_ARG_INFO_EX可用于向Zend Engine提供有关函数参数的信息.宏的第四个参数,命名为required_num_args,让引擎自动控制参数的数量,从而消除了这个麻烦.但是,我找不到让它工作的方法:引擎总是运行扩展的函数而没有任何警告,即使PHP脚本没有传递足够的参数.

这是我对函数参数的定义:

ZEND_BEGIN_ARG_INFO_EX(test_func_swt_arginfo, 0, 0, 3)
    ZEND_ARG_INFO(1, firstArg)
    ZEND_ARG_ARRAY_INFO(0, secondArg, true)
    ZEND_ARG_OBJ_INFO(1, thirdArg, SomeClass, false)
ZEND_END_ARG_INFO()
Run Code Online (Sandbox Code Playgroud)

这是我对函数的定义,由PHP扩展导出:

static const zend_function_entry test_func_functions[] = {
    PHP_FE(sample_with_types, test_func_swt_arginfo)
    PHP_FE_END
};
Run Code Online (Sandbox Code Playgroud)

这是我的功能:

PHP_FUNCTION(sample_with_types)
{
    RETURN_TRUE;
}
Run Code Online (Sandbox Code Playgroud)

这是我运行的PHP脚本:

<?php
sample_with_types();
Run Code Online (Sandbox Code Playgroud)

预期结果:PHP显示错误/警告/异常,例如"没有足够的参数传递给函数" ; 该功能不执行.

实际结果:函数执行并返回true.

如何正确配置函数参数结构,以便Zend Engine自动检查参数个数?或者我required_num_argsZEND_BEGIN_ARG_INFO_EX宏观中误解了论证的目的?

php c php-extension php-internals

5
推荐指数
1
解决办法
1725
查看次数

无法在OS X Mavericks上加载PHP扩展

所以我升级到OS X 10.9 Mavericks,我正在尝试再次设置我的本地开发环境.我xcode-select --install这个线程中提到的运行,它让我成功编译扩展.我已经确认扩展名存在于/usr/lib/php/extensions/no-debug-non-zts-20100525我已添加extension=redis.so到我的php.ini文件中.

我没有看到任何与无法加载扩展相关的错误,并phpinfo()报告了预期的extension_dir并extension=redis.so在其输出中显示了a ,确认我确实将其放入正确的文件中.不幸的是,这是输出中唯一的"redis"痕迹phpinfo().

当我转到我的应用程序时,我收到错误: Fatal error: Class 'Redis' not found in /Volumes/Storage/ty/Sites/audiomack/application/Bootstrap.php on line 95

我安装sudo pecl install redis了一次,手动下载phpredis zip并自己编译一次,结果相同.

PHP没有加载扩展的任何想法?

我得到一个似乎无关的奇怪警告,但我会提到它的完整性:在我设置的php.ini中date.timezone = America/New_York,但我的设置似乎被忽略了.PHP信息的"日期"部分仍将date.timezone显示为"无值",并向我发出了我们已经看过一百次的警告:

It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are …

php php-extension php-ini osx-mavericks

5
推荐指数
1
解决办法
3176
查看次数

您的要求无法解析为可安装的软件包集

很抱歉与另一个问题重复此问题.我无法解决我的问题.

我正在研究一个基于的项目Ratchet.我试图运行这个Push Integration例子.所以,为了运行,我应该使用composer来获得一些依赖.我创建一个composer.json文件,如下所示:

{
    "autoload": {
        "psr-0": {
            "MyApp": "src"
        }
    },
    "require": {
        "cboden/ratchet": "0.3.*",
        "react/zmq": "0.2.*|0.3.*"
    }
}
Run Code Online (Sandbox Code Playgroud)

当我在其上执行composer时,出现以下错误:

Loading composer repositories with package information
Installing dependencies (including require-dev)
Your requirements could not be resolved to an installable set of packages.

  Problem 1
    - react/zmq v0.3.0 requires ext-zmq * -> the requested PHP extension zmq is missing from your system.
    - react/zmq v0.2.0 requires ext-zmq * -> the requested PHP extension zmq is missing …
Run Code Online (Sandbox Code Playgroud)

php php-extension zeromq composer-php

5
推荐指数
2
解决办法
7959
查看次数

使用PHP-FPM时如何从PHP扩展中捕获输出

我在PHP中加载了自定义C扩展,在扩展内部有一个函数做这样的事情

void a() {
    printf("abc");
}
Run Code Online (Sandbox Code Playgroud)

我可以a()在CLI模式(命令行)中调用没有问题,abc并按预期获得输出.但是当我在PHP-FPM模式的Yii项目中再次尝试时,我无法获得该输出.

我确信的是:

  • 扩展已加载.
  • 成功完成函数调用,没有错误.
  • PHP输出缓冲已关闭.我ob_end_clean()在调用之前调用a()了两次,第一次调用return true,第二次调用返回false.

所以我的问题是:

我应该从PHP-FPM模式的扩展中获得输出吗?

如果是这样,我如何捕获输出,或者请给我一些调试建议.

php php-extension

5
推荐指数
1
解决办法
237
查看次数

PHP上的方法/函数调用事件

有没有一种方法可以捕获方法/函数调用并使用xdebug跟踪之类的php返回事件?

我尝试使用register_tick_function,但是我不太确定这是个好方法。

我也尝试做自己的php扩展(使用Zephir),但仍然是同样的问题。

顺便说一句,我不想​​使用xdebug扩展。最好的方法是什么?

php php-extension zephir

5
推荐指数
1
解决办法
156
查看次数