问题标签 [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.

0 投票
1 回答
536 浏览

php - 使 getimagesize() 引用缓存值

我正在调整一个 zen-cart 网站以提高 CPU 效率。对其进行分析后,我看到 getimagesize 函数占页面加载时间的近 50%。图像存储在本地。一种选择是通过 zen-cart 的源代码并用自定义的东西替换此函数以引用缓存值,因为图像很少更改。但是,由于 php 是开源的,也许还有另一种选择:有没有办法修改这个函数,使它只从缓存中读取一个值,我可以在将图像上传到服务器时设置该值?也许通过向函数添加一个可选参数,使其从缓存中读取。

0 投票
2 回答
1198 浏览

delphi - 与zend(多维数组)交换数据

我在我的应用程序中嵌入 PHP(用 Delphi 2010 编写),使用 PHP4Delphi 组件与 php5ts.dll 进行交互。我猜我的程序充当 PHP(sapi 模块?)的扩展,因为它注册了一些可在 PHP 脚本中使用的函数和常量……无论如何,在使用简单数据类型时效果很好,但是当我尝试使用多维数组时作为返回值我得到错误

Access violation at address 01CD3C35 in module 'php5ts.dll'. Read of address 0231E608.
堆栈列表
(000A2C35){php5ts.dll} [01CD3C35] destroy_op_array + $35
(004C4D61){myApp.exe } [008C5D61] php4delphi.TPHPEngine.ShutdownEngine (Line 1497, "php4delphi.pas" + 17) + $7

php4delphi.pas 中的第 1497 行被调用tsrm_shutdown();

对我来说,它看起来像垃圾收集器在脚本末尾崩溃,所以我怀疑我没有正确地将数据发送回引擎......因此我的问题是应该如何将多维数组发送回 PHP?
我正在使用的模式是

我是否必须在某个地方“注册”我创建的子数组?我必须增加或减少refcount或设置is_ref吗?IOW,必须如何设置子数组的 return_value 和 zvals?
我尝试将 1 添加到每个数组的 refcount(虽然 MAKE_STD_ZVAL 已经将 refcount 初始化为 1)并且可以治愈 AV 但有时应用程序在执行脚本时会消失 - 我怀疑它会导致引擎的内存管理器中的无限递归,导致 php DLL 和随身携带应用程序...当将 refcount 设置为 0(零;假设在 PHP 脚本中分配返回值时,它的 refcount 将为 1,然后当 PHP 变量超出范围时,它将被销毁)似乎工作(即没有崩溃,没有 AV)但脚本不会生成任何输出,只是空的 html 文件......

我还将数据作为数组发送到我的函数中,然后使用zend_hash_findzend_hash_get_current_data来读取数据。这会弄乱变量的引用计数吗?zend_hash_find即,当我完成它时,我是否必须减少返回的变量的 refcout ?
迭代数组时重用相同的变量是否安全,即

还是应该循环的每次迭代都创建/释放 Val?

TIA
艾因

0 投票
1 回答
4997 浏览

php - PHP 的 MySQL 游标实现以及它们如何管理内存

PHP 中不同的 MySQL 游标如何管理内存?我的意思是,当我进行一个检索大型结果集的 MySQL 查询并取回 MySQL 资源时,查询检索到的数据有多少存储在本地内存中,以及如何检索到更多结果?游标是否会自动获取所有结果,并在我使用缓冲系统遍历资源时将它们提供给我fetch_array

最后,mysql中不同驱动程序的游标是否以不同的方式实现?有几个用于 PHP 的 MySQL 驱动程序,mysql, mysqli,pdo等。它们都遵循相同的做法吗?

0 投票
1 回答
595 浏览

php - PHP MongoDB 驱动程序的游标如何缓冲结果集?

当查询mongodb时,它的游标如何处理内存中的结果集?游标是否一次检索与查询匹配的所有文档?还是一次检索 1 个文档?或者他们被缓冲了?还是有我不知道的不同解决方案?

如果是缓冲解决方案,它们如何存储在服务器/客户端上?客户端在本地保留了多少数据?

0 投票
1 回答
3634 浏览

php - PHP 如何为变量分配和释放内存?

我想知道 PHP 什么时候释放用于变量的内存

例如

是否比以下速度慢:

?

0 投票
1 回答
165 浏览

php - PHP 如何实现其所有适合的容器`array`?

如果是的话c++,这可以通过模板来实现,但是我们知道PHP是用写的c,这种数据结构是如何在没有模板的情况下实现的呢?

0 投票
2 回答
232 浏览

php - PHP数组语法/运算符?

在 PHP 中编写关联数组的语法时,我们执行以下操作

我很好奇=>语法的关系,或者可能是运算符。这是否与 ZE 中哈希表中使用的某种引用有关,或者与 中使用的某种后续右移或引用有关C?我想我只是想知道这种语法的真正潜在目的,它与用于处理数组的 ZE 和/或 php 扩展有何关系,它与C编译前的书面函数有何关系,或者如果我只是不知道我在做什么我在谈论:)

0 投票
2 回答
2488 浏览

php - 括号改变函数调用结果的语义

另一个问题中指出,将 PHP 函数调用的结果包装在括号中可以以某种方式将结果转换为完全成熟的表达式,这样以下工作:

我试图在文档中找到任何内容来明确明确地解释这里发生的事情。与 C++ 不同,我对 PHP 语法及其对语句/表达式的处理知之甚少,无法自己派生它。

文档中是否隐藏了有关此行为的任何内容?如果不是,其他人可以在不求助于假设的情况下解释它吗?


更新

我首先发现这个 EBNF声称代表 PHP 语法,并尝试自己解码我的脚本,但最终放弃了。

然后,为了生成两个变体的文件,我使用phc以下命令为两个脚本生成了AST 图像:.dotfoo()

在这两种情况下,结果完全相同:

片段 1 和 2 的解析树

0 投票
3 回答
807 浏览

php - 令人费解的 php 解析器错误

好吧,也许不是那么令人费解,但就是这样。

我在乱七八糟地注意到这一点,只<?php在一个文件中输入,只是那个,之后没有空格,没有别的只是标签,会引发解析错误。

使用单个空格可以正常工作。我想知道是否有人知道为什么解析器会阻塞,因为省略结束标签是完全可以的。谢谢。

0 投票
0 回答
1157 浏览

php - PHP Zend 引擎扩展静态方法调用

我正在编写一个 PHP 扩展。我尝试从 C 代码中调用 PHP 代码中的静态方法。

PHP 方法如下所示:

C 中的调用如下所示:

...其中所有传递的参数都应包含正确的值。这里奇怪的是:如果我针对 php 5.2 编译我的扩展,则代码可以正常工作,如果我针对 php 5.3 编译它,则方法调用失败且没有错误消息。

我也尝试zend_call_method过任何一个版本都没有成功。

谁能给我小费?您将如何从 C 中调用静态方法?

提前致谢!

编辑

对不起,伙计们,我是这样工作zend_call_method的:

...所以我了解到:

  1. 函数名必须始终为小写
  2. 当涉及到字符串长度时,您最好查看 PHP 的源代码(在zend_call_method内部添加 +1)。

虽然我是 C 新手,但我认为 PHP 代码库在很多方面都过于复杂了!

希望这对其他人有帮助!