问题标签 [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 投票
5 回答
2361 浏览

php - 从 PHP 调用外部库。哪个更快:执行还是扩展?

我需要从网页调用用 C++ 编写的外部库并显示结果。平台是Linux、Apache、PHP。

我目前的想法是使用 PHP 服务来调用我的库/程序。我发现有两种可能的方法来做到这一点:1)使用 PHP 'exec' 函数 2)编写 PHP 扩展

我很好奇什么更有效?快点?减轻服务器负载?

我可能需要每秒进行 4 次调用,所以我希望尽可能地达到最佳状态。

PS 如果您知道从网页调用 C++ 库或程序的其他(更有效)方式,请告诉我。

非常感谢,
罗布斯塔

0 投票
1 回答
3842 浏览

php - 如何修复 PHP 模块线程安全/非线程安全不匹配?

这是错误日志中的:

我如何获得 PHP 的非线程安全源?我在 windows.php.net/download 上找到的唯一下载链接是http://windows.php.net/downloads/releases/php-5.3.2-src.zip,这似乎是线程安全代码 --- 或有没有办法告诉源它实际上是非线程安全的?

我已经尝试--disable-zts使用命令行,configure.bat但是虽然这对来自的输出有很好的影响configure.bat,但它似乎并没有使源代码的线程安全性降低。

0 投票
1 回答
278 浏览

php - 来自 SWIG 生成的 PHP 扩展的标准输出

我有以下 C++ 函数:

我正在通过 SWIG 将其移植到 PHP。一切都编译得很好,并且扩展正确加载。我可以从 PHP 调用,但是如果我从命令行运行 PHP 脚本foo(),我只会看到输出。bar

如果我在浏览器中加载脚本,什么都不会出现。为什么bar在这种情况下不显示?

0 投票
1 回答
488 浏览

php - 使用 SWIG 在 PHP 中包装 boost::shared_ptr

如果我使用 SWIG 来包装这个 C++ 函数:

然后在 PHP 中调用它:

$clientis resource, not的类型object,所以我不能调用Client方法。

包装此功能的选择是什么?我正在为其他人的 C++ 库创建一个 PHP 包装器,因此重新编写代码以使其不使用boost::shared_ptr并不是一个真正的选择。

这是我迄今为止提出的唯一解决方案:

并在 PHP 中调用它:

现在的类型$clientobject,我可以调用Client它的方法。这是一个合理的解决方法吗?如果没有,我该怎么办?

0 投票
1 回答
101 浏览

php - 使 C 函数可用于 php

我有一个 C dll,其中包含我想从 php 访问的函数和枚举。我该怎么做?

0 投票
1 回答
199 浏览

php - 为 PHP 扩展构建环境?

寻找用于创建自定义 PHP 扩展的开发框架。PHP4Delphi看起来很有前途。还有通常的 Visual Studio 路线。还有其他人吗?

0 投票
1 回答
617 浏览

php - 在不知道资源类型的情况下获取 zend 资源

zend_fetch_resource是否可以在不知道获取资源类型的情况下获取 zend 资源( )?如果是这样,怎么做?

注意:我正在编写 PHP 扩展。

0 投票
1 回答
926 浏览

php - 来自 SWIG 生成的扩展的内存泄漏

我在使用 SWIG 在 PHP 中包装 C++ 库时遇到内存泄漏问题。在启用导向器的情况下将包含复杂类型的 C++ 回调发送到 PHP 时,似乎会发生这种情况。这是一个重现泄漏的独立示例:

客户端.hpp:

过程回调.hpp:

所以要使用它,你创建一个Client,将一个子类传递ProcedureCallback给客户端的invoke方法,然后客户端去调用callback你给它的方法,并传递一个空的 int 向量。

这是 SWIG 接口文件:

它的输出非常大,所以我把它放在了 pastebin 上:debugasync_wrap.cpp。对这个文件感兴趣的可能是 SwigDirector_ProcedureCallback::callback(第 1319 行):

这也可能是有趣的(第 827 行):

并演示 PHP 中的内存泄漏(debugasync.php是一组由 SWIG 生成的代理类,我也已上传到 pastebin):

这会打印内存使用情况,执行 1k 次调用,然后重复。运行它会显示一个快速增长的内存空间:

还要注意的是,如果 C++ 回调传递的是原始类型(即int)而不是复杂类型(即std::vector<int>),则不会发生内存泄漏。

这种内存泄漏的原因是什么?

更一般地说,我可以使用哪些工具来解决这个问题?即使在使用调试符号构建 PHP 之后,Valgrind 的地块也无法真正缩小范围。

0 投票
1 回答
731 浏览

php - PHP没有加载自定义扩展

我正在用 PHP 编写一个自定义扩展,并将扩展加载到 php.ini 文件中。使用命令行界面时,扩展加载并运行良好,但不会加载到 Web 服务器(带有 FastCGI 的 Cherokee)。为了在被问及之前阻止一些问题,我肯定使用了正确的 php.ini 文件,并且我已经正确设置了 extension_dir 的值。即使我指定了加载扩展的完整路径,它也不起作用。

所以我想知道我能做些什么来解决这个问题。我怀疑这可能是由于外部依赖关系,因为在我将扩展名链接到几个共享库之前,它加载得很好。但是,我在 /var/log/cherokee/cherokee.error 中没有看到任何问题的迹象。关于如何确定问题的任何其他想法?

0 投票
3 回答
5359 浏览

php - 任何人都可以为 php 5.3.0 提供uploadprogress.dll 扩展名吗?

我需要windows上php的uploadprogress扩展。我从这里下载了 dll ,但版本与我的 php.ini 不匹配。我有 php 5.3.0 build 20090626 VC++6。而且我找不到兼容的uploadprogress.dll。我无法构建它,因为我没有我的版本的 php 源代码。我也不想使用 APC 扩展。任何人都可以为我提供这个 dll 吗?