首页 > TAG信息列表 > php-internals
c-使用zend读取PHP.ini以进行PHP扩展(不是PHP语言)
我正在尝试使用zend从php.ini中读取一些设置.我正在使用的API是 long zend_ini_long(char *name, uint name_length, int orig) 但是它总是返回0.我仔细检查了名称,并确保我在php.ini中指定的值大于0.是否缺少任何内容?解决方法: long maxwait = zend_ini_long("max_execution_tiPHP Zend Engine扩展和静态方法
在为php(5.3)编写扩展时,我想访问静态方法上的zend_class_entry指针. 在非静态方法上,我可以使用getThis()宏以及在Z_OBJCE_P宏内,如下所示: zend_class_entry ce* = Z_OBJCE_P(getThis()); 现在的问题是: 在静态方法上,getThis()宏返回空指针,因此我不能使用Z_OBJCE_P宏. 有没有人PHP扩展名:无法使用zend_hash_update更新类字段
我想实现此类到php扩展: class MyClass { protected $attrs = array(); public function __construct($id = null) { $this->attrs['id'] = $id; $this->attrs['name'] = ''; } public function __get($key) { if (array_keyPHP 7如何从常规列表中删除资源?
我正在将php扩展名升级到php 7,并且我想使用zend_register_resource删除已在常规列表中注册的资源,稍后再使用zend_list_close关闭该资源.关闭函数如下所示: PHP_FUNCTION(myFunc_cleanAndExit) { zval* rsrc = NULL; ... int res = zend_parse_parameters(哪些PHP函数受allow_url_fopen影响?
在PHP中,allow_url_fopen标志控制是否可以将远程URL设置为used by various file system functions,以便访问远程文件. 建议现在使用安全最佳实践来禁用此选项,因为它是潜在的攻击媒介.但是,如果禁用此设置,则依赖此功能才能工作的任何代码都将被破坏.例如,我知道至少有一个reCaptchPHP内部原理:TSRMLS_FETCH如何工作?
PHP Internals TSRMLS_FETCH宏如何工作? 每PHP Manual While developing extensions, build errors that contain “tsrm_ls is undefined” or errors to that effect stem from the fact that TSRMLS is undefined in the current scope, to fix this, declare the function to为什么PHP元素在引用元素时会被修改?
在引用数组的元素时,会修改数组的内容: $arr = array(100, 200); var_dump($arr); /* shows: array(2) { [0]=> int(100) // ← ← ← int(100) [1]=> int(200) } */ $r = &$arr[0]; var_dump($arr); /* shows: array(2) { [0]=> &int(100) // ← ← ← &int(10PHP扩展开发入门
请提出有关PHP“低级”С-modules编程接口的帮助文章或教程.解决方法:搜索我的书签,我发现的链接只有: > Extension Writing Part I: Introduction to PHP and Zend > Extension Writing Part II: Parameters, Arrays, and ZVALs> Extension Writing Part II: Parameters, Arrays, aPHP’foreach’如何实际工作?
让我通过说我知道foreach是什么,做什么以及如何使用它来为此加上前缀.这个问题涉及它如何在发动机罩下工作,我不希望任何答案都是“这就是你如何用foreach循环一个阵列”. 很长一段时间,我认为foreach使用数组本身.然后我发现许多引用它的数据副本的事实,我已经假设这是故事的结尾.PHP被称为“二进制安全”的功能是什么?这些“非二进制安全”函数向哪些库移除字符串?为什么?
我正在使用Windows 10 Home Single Language Edition,它是我机器上的64位操作系统. 我安装了最新版本的XAMPP,它在我的机器上安装了PHP 7.2.7. 我根据PHP Manual的摘录问这个问题: The string in PHP is implemented as an array of bytes and an integer indicating the lengt内存泄漏与php扩展中的malloc
我做了一个php扩展,看起来像: PHP_FUNCTION(function_name) { ... proc_data = ( char * )malloc(length); ... RETURN_STRINGL( proc_data, length, 1 ); } function_name是php代码中可用的函数,它返回一个字符串.但是这个字符串是使用malloc分配内存的,它会自从php扩展调用对象构造函数(__construct)
我只是在试验PHP扩展,我想知道在扩展中调用对象构造函数的建议/首选方法是什么. 我已经读过,通过调用object_init_ex函数,不会自动调用该对象的构造函数.从我所做的测试来看,这似乎也是正确的.我们假设我有以下代码,其中’Person’是有效的类名: zend_class_entry *class_entry = Nphp – 什么是zend扩展?
如果你看this documentation,第一个参数只返回Zend扩展. 与PHP(“简单”)扩展相比,什么是Zend扩展?解决方法:Zend扩展程序挂钩到语言的“较低级别”.单个扩展也可以是PHP扩展和Zend扩展.例如,Xdebug使用Zend扩展组件挂接到语言的较低层以拦截调试调用. Zend扩展是Zend Engine(ZE)本PHP解释器是否消除了死条件?
在将PHP源代码转换为操作码之前,是否存在消除死条件的优化过程? 例: <?php if (false) { echo 'false'; } echo 'true'; 它变成了回声’真’;? 如果答案是肯定的,PHP可以处理以下哪种情况? if(false); //Explicit boolean $true = true; if($true); //Variable tha以下哪个PHP数组结构将使用更少的内存?
以下哪一项会使用更少的内存? $myArray = array(); $myArray[1] = array(1,2,3,4,5,6,7,8,9,10); $myArray[2] = array(1,2,3,4,5,6,7,8,9,10); $myArray[3] = array(1,2,3,4,5,6,7,8,9,10); 要么 $myArray = array(); $myArray[1] = array(1,2,3); $myArray[2] = array(1,2,3);PHP:为什么零长度字符串上的数组语法将字符串转换为数组?
在PHP中,您可以使用数组语法来访问字符串索引.以下程序 <?php $foo = "Hello"; echo $foo[0],"\n"; ?> 回声 H 但是,如果您访问零长度字符串的第一个字符 <?php $bar = ""; $bar[0] = "test"; var_dump($bar); ?> PHP将您的字符串转换为数组.上面的代码产生 array(1) {php – 了解zend_execute API
我已经浏览过很多东西,从来没有在zend_extensions上找到一本好书或任何在线文档[在PHP扩展上发现了很多但在zend_extensions上没有太多].我正在撰写扩展程序,并希望执行以下操作: 1.捕获当前正在执行的函数的状态(主要是函数调用的参数). [我发现了一个包含一些函数数据的结构,并查php – 究竟是什么导致E_CORE_ERROR和E_CORE_WARNING?
PHP Manual声明E_CORE_ERROR是PHP初始启动期间发生的致命错误: This is like an E_ERROR, except it is generated by the core of PHP. 此外,它声明E_CORE_WARNING是PHP初始启动期间发生的警告: This is like an E_WARNING, except it is generated by the core of PHP. E_CORZend引擎是否可以在PHP之外嵌入?
如果我记得的话,Zend引擎的原始设计之一是,它可能相对容易嵌入其他人可能希望创建的语言.基本上,没有所有PHP模块的PHP语法.这仍然是这样吗?解决方法:好吧,Zend引擎基本上是一个解释PHP字节码的虚拟机.基本上你要做的就是为语言和编译器创建一个解析器,并将它编译成PHP字节码,因此它php – 存储整数的实际内存开销是多少?
我想说我就是这样做的 $arr = array(); for ($i = 0; $i < 10; $i++) $arr[] = $i; 所以我将10个整数存储在一个数组中.如果整数是32b,则内存开销应为40字节.问题是,我没有告诉php它是一个整数所以它要么必须将其存储为其他东西? (例如,js喜欢制作双打)或者保留额外的数据以提醒自如何将数组作为Object属性添加到PHP扩展中声明的类?
我希望我的PHP扩展声明一个等效于以下PHP的类: class MyClass { public $MyMemberArray; __construct() { $this->MyMemberArray = array(); } } 我正在遵循“Advanced PHP Programming”和“Extending and Embedding PHP”中的示例,我可以在PHP_MINIT_FPHP的静态成员和实例成员似乎没有什么不同.为什么PHP会这样做(没有警告)?
<?php class A { public function instanceFunc() { echo "instance"; } public static function staticFunc() { echo "static"; } } A::instanceFunc(); // instance $a = new A(); $a->staticFunc(); // static 这意味着在PHP中静态方PHP MongoDB驱动程序的Cursor如何缓冲结果集?
当对mongodb进行查询时,它的光标如何处理内存中的结果集?光标是否一次检索与查询匹配的所有文档?或者它一次检索1个文件?或者他们缓冲?还是有一个我不知道的不同解决方案? 如果它是缓冲解决方案,它们如何存储在服务器/客户端上?客户端在本地保留多少数据?解决方法:发出查询时,MongoDB wirePHP引擎是否优化循环中的匿名函数?
我有一个数组存储对单个anonymous function的多个引用: $fns = array(); //some code $fn = function(){ echo 'this is closure 12345... < 67890'; // etc etc.. }; for($x=12345; $x<67890; ++$x){ $fns[$x] = $fn; } 可以看出,我们只创建了一个匿名函数. 如果我们