问题标签 [php-internals]
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 扩展中获取运行脚本的名称
我正在为 PHP 编写一个小扩展。有没有办法在运行时知道正在运行的脚本文件的名称(例如test.php
:)?也许一些全局或环境变量?
php - 覆盖同一属性上 __get 和 __set 的递归限制
有没有办法覆盖同一属性的__get
递归限制。__set
我希望能够以不同于第一个条目的方式处理第二个重新进入。
此代码示例不实用,但最容易说明问题。
我的互联网中断了,所以我在手机上打字,所以很可能有错别字。
php - 在php类方法中使最后一个数组参数可选(C)
我在 C 中创建一个 PHP 扩展来访问 SPI 接口。到目前为止,我已经完成了几乎所有工作:Github 上的 php_spi
但是,我似乎无法将构造函数中的 $options 参数设为可选。我的工作代码是这样的:
但是,如果我遵循所有文档的建议,我可以找到并在 l 和 a 之间添加一个管道,如下所示:
然后我的扩展默默地失败了 - 任何人都可以给我任何建议吗?
c - 修改 PHP rand 函数
出于测试和学习的目的,我想修改https://github.com/php/php-src :ext/standard/rand.c中的 php rand和mt_rand函数。
我想在每次调用 rand 函数时给出一个固定的输出,为此我修改了代码
编译
最后调用 rand 函数echo rand(3000,4000);
,它总是返回3000
。
修改此功能的方法是什么?为什么有TSRMLS_D
但没有范围参数?
php - 构建 PHP 扩展并使用 call_user_function
我编写了一个代码来构建一个扩展以通过mysql_connect
.
我的代码已编译,但是当我想在 PHP 中使用我的函数时,它需要一个循环并且可能无法工作。这是我的 C++ 代码:
任何机构都可以帮助我吗?
我只想返回我的资源连接。
我知道“retval”是我的资源,但我不知道如何将此资源返回到我的 php 代码中。
php - 为什么 get_memory_usage 会保留内存?
如果我在我的计算机上运行以下 PHP 程序
我得到输出
由此看来,最初的调用似乎memory_get_usage
是保留 32KB 的内存。echo
我在没有声明的情况下尝试了这个
并得到了类似的结果
虽然删除echo
语句减少了脚本的整体内存使用量,但在初始调用memory_get_usage
. 为什么是这样?
我已经在多台计算机上尝试过,虽然实际数字不同,但差距保持不变。
如果我看一下(我认为是)这个函数的来源
我在那里看不到任何必须说“将这个变量保留在内存中”的东西。然而,我已经好几年没有认真地写过 C 语言了,我也从来没有专业地破解过 PHP 源代码,而且我跟踪执行的能力是零。
所以,我的问题是,是什么保留了 32KB 的内存,这在 PHP 源代码中发生在哪里和/或我如何从memory_get_usage
入口点跟踪它。
php - are zend engine globals share memory across processes?
I've been going through PHP's source code and the mysql_pconnect function and noticed it's using some kind of HashTable persistent_list
which is defined in zend_globals.
The question is, how are this globals and variables are preserved across requests when PHP is set as mod apache/fcgi. If it's a new PHP process spawned for every request those variables should not be preserved.
php - PHP中对象的破坏顺序是什么?
对象解构的确切顺序是什么?
通过测试,我有一个想法:当前范围的 FIFO。
一次又一次产生相同的结果:
PHP 手册含糊不清(强调我的以突出不确定性):“只要在关闭序列期间没有对特定对象的其他引用或以任何顺序调用析构函数方法。”
解构的确切顺序是什么?谁能详细描述PHP使用的销毁命令的实现?而且,如果这个顺序在所有 PHP 版本之间不一致,任何人都可以查明哪些 PHP 版本按这个顺序更改?
php - 为 PHP 5.4 编写 C++ 扩展,示例代码已过时
我正在尝试为 php5.4 编写一个扩展,它基本上在 CPP 中包装了一个非常简单的类。
这是出于教育目的。
我发现在 php5.4 中执行此操作的方法已从 php5.3 更改
我在哪里可以找到有关如何操作的文档?或者更好的是,代码示例,任何其他包装 CPP 类并在 php5.4 中工作的扩展
例如,以前有效,现在不再有效。取自http://devzone.zend.com/1435/wrapping-c-classes-in-a-php-extension/
该行将
zend_hash_copy(obj->std.properties, &type->default_properties,
(copy_ctor_func_t)zval_add_ref, (void *)&tmp, sizeof(zval *));
失败,因为结构实例type
(忘记它的定义)不再具有成员default_properties
php - PHP 扩展中的 SEG 错误
我编写了一个 PHP 扩展来访问静态库中的函数,我将 PHP 构建为 CGI,一切似乎都正常工作(经过几天的工作......)
一旦一切正常,我很兴奋,我重新编译了 PHP,没有调试我在其中的消息。( php_printf("here111");
.... php_printf("sending arguments...");
)
然后,它就停止了工作。我在静态库中调用的函数有效,我已经通过直接从另一个可执行文件调用它来测试它。
我用调试符号()构建了PHP,--enable-debug
并且可以在gdb中对其进行一定程度的调试。
我仍在努力找出问题所在。似乎 lib ( diffFst
) 中的函数似乎无法读取输入参数。
当我调用此函数时,该php_printf()
语句起作用并打印出正确的值。但是,当我让它调用 difffst_ 函数时,当它尝试读取输入变量时出现段错误。
diffFst 函数是用 fortran 编写的:
具体来说,它在尝试读取时在第 122 行(根据调试器)失败filA
。
我不知道为什么,我试过:
- 使函数成为子程序
- 使函数成为 fortran 函数
- 使函数成为“纯”函数
- 具有返回值(这就是现在的情况,即
ier = ..
) - 在代码中有
return
语句,删除return
语句 - 尝试将内容打印到标准输出并记录文件
似乎数据没有正确传递。即使在调试器中,我也无法读取参数。
令人沮丧的是,在某一时刻,这只是工作..我已经检查了文件权限,检查了路径等。我可以从一个 fortran 包装器可执行文件中运行这个函数就好了。
有没有我错过的技巧?
谢谢