问题标签 [php-extension]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
882 浏览

php - PHP 扩展:模块 'hello' 已在第 0 行的未知中加载

我的开发环境:

Linux - Linux localhost.localdomain 2.6.9-42。

阿帕奇:2.2.4

php:5.2.3

我写了一个php扩展你好。

当我进行测试时,它告诉我:

PHP 警告:模块 'hello' 已在第 0 行的未知中加载

PHP 警告:模块 'hello' 已在第 0 行的未知中加载

我检查了 php.ini ,只有一行 extension=hello.so。

我删除了 php.ini 中的 extension=hello.so,然后测试成功,但是 webserver 进程没有加载 hello 模块。

我应该怎么办?

0 投票
1 回答
571 浏览

php - 过早收集资源垃圾

我用SWIG创建了一个 PHP 扩展,一切正常,但是在链接方法调用时我观察到一些奇怪的垃圾收集行为。例如,这有效:

但是这个段错误:

唯一的区别是第一个创建$results,而第二个将调用链接在一起。

SWIG 实际上只向 PHP 公开函数并生成 PHP 代理类以与它们交互。这些代理类基本上包含一个资源,该资源与这些函数通常采用的任何其他参数一起传递给每个公开的函数。考虑到这些代理类可能是问题所在,我重新编写了代码以绕过它们,而是直接使用公开的函数。和以前一样,这有效:

再一次,这个段错误:

同样,唯一的区别是第一个创建$results,而第二个将调用链接在一起。

此时,我在 gdb/valgrind 中调试了一段时间,并确定在InvocationResponse_results将调用链接在一起时调用返回的析构函数过早。为了观察,我std::cout在暴露的 C++ 函数及其析构函数的顶部插入了语句。这是没有链接的输出:

我在脚本的末尾打印---,以便能够区分脚本执行期间发生的情况和之后发生的情况。Hola Mundo是从printf。其余的来自 C++。如您所见,所有内容都按预期顺序调用。析构函数仅在脚本执行后被调用,尽管TableIterator析构函数的调用比我预期的要早。但是,这并没有引起任何问题,并且可能不相关。现在将其与带有链接的输出进行比较:

InvocationResponse_results如果没有保存到的返回值,它在执行甚至退出调用链(在和之间)$results之前很高兴地被垃圾收集,这很快就会导致问题,最终导致段错误。Tables_getTable_iterator

我还检查了在各个地方使用的引用计数xdebug_debug_zval(),但没有发现任何异常。这是它的输出$results$row没有链接:

并继续$row链接:

我现在已经花了几天的时间,我几乎没有想法,所以真的任何关于如何解决这个问题的见解将不胜感激。

0 投票
1 回答
527 浏览

php - Tidy2.0 扩展

所以我试图在我的 Karmic 上安装 Tidy2.0,遵循本指南: http: //www.howtoforge.com/forums/archive/index.php/t-7395.html

我认为一切都会奏效,但似乎 Tidy2.0 的源代码不再存在:http: //support.office-shadow.com/installer/tidy2.0.tar.gz

尽管该站点仍然存在(即 office-shadow.com),但他们似乎不再托管扩展程序。因此,我希望这里有人把它放在盒子的某个地方。请?帮助?

谢谢。

0 投票
1 回答
237 浏览

php - 使用修改的 DEBUG_ZEND 级别编译 PHP

我正在调试一个 PHP 扩展,并在浏览 PHP 源代码时发现了这一点:

所以我想在 DEBUG_ZEND 设置为 2 的情况下进行编译。在Zend/zend_compile.h中,我看到:

我将该值编辑为 2,然后尝试通常的方法:

make做了一段时间,但后来我看到一堆Reducing refcount for ...消息然后make失败了:

如果我设置DEBUG_ZEND回 0,PHP 可以正常编译。我能找到的唯一参考DEBUG_ZEND是在这个错误报告中:

http://bugs.php.net/bug.php?id=45761

这个片段看起来很相关:

我通过在配置命令的开头添加 CFLAGS="-DDEBUG_ZEND=2" 重新配置,做了一个'make clean',然后'make' ...

所以我CFLAGS="-DDEBUG_ZEND=2"在shebang之后立即添加configure并能够编译。但是,在运行我的脚本时,我没有看到任何关于引用计数的额外输出,所以我并不真正相信它做了什么。

DEBUG_ZEND设置为 2编译 PHP 的正确方法是什么?

0 投票
2 回答
216 浏览

php - _COOKIE 服务端信息

我想在php的源代码中获取使用setcookie函数存储的cookie信息..而不是php源代码.._COOKIE['xx'];对应的C代码是什么?

换句话说,_COOKIE 数组在哪里创建和填充?

0 投票
1 回答
3199 浏览

php - 将 Zval 转换为 char*

我想将 Zval 转换为 char*。我如何在我的 php 扩展中做到这一点?

0 投票
1 回答
332 浏览

php - 在 /ext/mysql 扩展中访问 Session 变量

我已经声明了一个看起来像的结构

在会话结构中,我将一个变量声明为

现在在 session_start 中,我已经初始化了 pair 变量的值,我必须在 /ext/mysql 扩展中访问这些值。关于如何实现它的建议将不胜感激

0 投票
2 回答
1574 浏览

php - 是否可以从扩展中调用 PHP_FUNCTION

让我详细说明一下标题。例如考虑 PHP_FUNCTION(session_start)。我是否能够从另一个 PHP_FUNCTION 的 session_id 中调用 session_start(这只是为了说明而不是实际目的)?

0 投票
5 回答
2668 浏览

php - Convert a class to an extension

I have a PHP class I want to convert to a PHP extension. I checked some tutorials (tuxradar's writing extensions, php.net's extending php, and zend's extension writing) and it's a bit complicated.

I found the article "How to write PHP extensions" (ed note: site is defunct) and I wanted to know if it is possible to use this to make it grab a PHP class from a certain path (say /home/website1/public_html/api/class.php), execute it and return the class instance.

This way it will be usable in other websites that are hosted on the same server – each can simply call the function and it will obtain its own instance.

Is that possible?

0 投票
3 回答
3387 浏览

php - 使用 Visual Studio 2008 编译 php 扩展,MODULE ID 与 php 不匹配

使用 VC9 (2008) 和 VC10 (2010) 编译我自己的 php 扩展后,使用以下步骤:

http://blog.slickedit.com/2007/09/creating-a-php-5-extension-with-visual-c-2005/

初始化 php 时出现下一个错误:

为什么它没有说我用VC9编译了模块?

更多信息:

操作系统:Windows7 x64 PHP:5.3.3,TS,VC9