问题标签 [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.
php - 从 PHP 调用外部库。哪个更快:执行还是扩展?
我需要从网页调用用 C++ 编写的外部库并显示结果。平台是Linux、Apache、PHP。
我目前的想法是使用 PHP 服务来调用我的库/程序。我发现有两种可能的方法来做到这一点:1)使用 PHP 'exec' 函数 2)编写 PHP 扩展
我很好奇什么更有效?快点?减轻服务器负载?
我可能需要每秒进行 4 次调用,所以我希望尽可能地达到最佳状态。
PS 如果您知道从网页调用 C++ 库或程序的其他(更有效)方式,请告诉我。
非常感谢,
罗布斯塔
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
,但它似乎并没有使源代码的线程安全性降低。
php - 来自 SWIG 生成的 PHP 扩展的标准输出
我有以下 C++ 函数:
我正在通过 SWIG 将其移植到 PHP。一切都编译得很好,并且扩展正确加载。我可以从 PHP 调用,但是如果我从命令行运行 PHP 脚本foo()
,我只会看到输出。bar
如果我在浏览器中加载脚本,什么都不会出现。为什么bar
在这种情况下不显示?
php - 使用 SWIG 在 PHP 中包装 boost::shared_ptr
如果我使用 SWIG 来包装这个 C++ 函数:
然后在 PHP 中调用它:
$client
is resource
, not的类型object
,所以我不能调用Client
方法。
包装此功能的选择是什么?我正在为其他人的 C++ 库创建一个 PHP 包装器,因此重新编写代码以使其不使用boost::shared_ptr
并不是一个真正的选择。
这是我迄今为止提出的唯一解决方案:
并在 PHP 中调用它:
现在的类型$client
是object
,我可以调用Client
它的方法。这是一个合理的解决方法吗?如果没有,我该怎么办?
php - 使 C 函数可用于 php
我有一个 C dll,其中包含我想从 php 访问的函数和枚举。我该怎么做?
php - 为 PHP 扩展构建环境?
寻找用于创建自定义 PHP 扩展的开发框架。PHP4Delphi看起来很有前途。还有通常的 Visual Studio 路线。还有其他人吗?
php - 在不知道资源类型的情况下获取 zend 资源
zend_fetch_resource
是否可以在不知道获取资源类型的情况下获取 zend 资源( )?如果是这样,怎么做?
注意:我正在编写 PHP 扩展。
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 的地块也无法真正缩小范围。
php - PHP没有加载自定义扩展
我正在用 PHP 编写一个自定义扩展,并将扩展加载到 php.ini 文件中。使用命令行界面时,扩展加载并运行良好,但不会加载到 Web 服务器(带有 FastCGI 的 Cherokee)。为了在被问及之前阻止一些问题,我肯定使用了正确的 php.ini 文件,并且我已经正确设置了 extension_dir 的值。即使我指定了加载扩展的完整路径,它也不起作用。
所以我想知道我能做些什么来解决这个问题。我怀疑这可能是由于外部依赖关系,因为在我将扩展名链接到几个共享库之前,它加载得很好。但是,我在 /var/log/cherokee/cherokee.error 中没有看到任何问题的迹象。关于如何确定问题的任何其他想法?
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 吗?