Questions tagged [php-internals]
How the PHP programming language works underneath, and questions about the underlying C code.
php-internals
268
questions
0
votes
0
answers
94
views
Adding new reference to any item in array affects behaviour of the array
I've seen many questions about this (one of them here)
$a = array('a', 'b', 'c', 'd');
foreach ($a as &$v) { }
foreach ($a as $v) { }
print_r($a);
and I get the answers, you shouldn't be ...
0
votes
1
answer
58
views
in php programming where is the array data and the address being stored?
i am new to php . i want to know the place where the array data and the address of array are being stored ?
are they storing in heap and stack , respectivelylike C# ?
I read many articles but I could ...
1
vote
0
answers
35
views
Are PHP zvals mutable?
I've been reading about memory management in PHP and learned that variables in PHP copy the reference to zvals as long as you don't do a write operation (copy on write paradigm).
https://www....
0
votes
0
answers
23
views
Is there an opcode in PHP VM that lets you stack allocate?
Title. Since you can enable escape analysis, there should also be an opcode that uses stack allocation instead of heap, right? Or how would that work?
1
vote
0
answers
267
views
How to create a php extension function with a return type-hint plus annotation
I'm trying to fix some php 8.1 deprecation notices in a PHP extension, which I believe involves either adding return type-hints (where possible, whilst maintaining some backwards-compatibility to php7....
1
vote
1
answer
253
views
How do I add a new opcode to PHP?
Searching for it I found this blog post: https://www.npopov.com/2017/04/14/PHP-7-Virtual-machine.html
Does it cover "everything" needed to add a new opcode, or all the places I'd need to ...
4
votes
0
answers
268
views
PHP5 zval container vs PHP7 zval container. How references & variables are stored now?
I am following a tutorial & reading through some articles on how variables are stored in PHP using zval (zend value) container. Most of those articles seem to be following & getting ...
2
votes
0
answers
174
views
How to call a PHP function from zend_compile.c?
I can't figure out how to call an existing PHP function, everytime I end up either with a segmentation fault or a Fatal error.
Disclaimer: I'm not experienced at all in low level programming, just ...
0
votes
1
answer
191
views
Why the macro "ZVAL_COPY_VALUE(z,v)" seems to work unexpectedly in PHP Internal?
My question is about HashTable:
The PHP VERSION debugged is PHP-7.0.12, I couldn't find out where the zval's str member is updated within the macro "ZVAL_COPY_VALUE(z, v)" when I add one new ...
4
votes
1
answer
266
views
Where is PHP echo implemented in the source?
You can lookup built-in functions by searching for e.g. PHPAPI(stream_copy_to_stream) and find the implementation in ext/standard/streamsfuncs.c.
How to do that for a language construct like echo?
I ...
0
votes
0
answers
424
views
PHP memory limit -1 unlinimited
In PHP 5.4 How much memory is allocated to a script, when we set memory_limit to -1 ?
Memory exhausted error will not come until all memory is exhausted .
But will this affect my other processes too? ...
9
votes
1
answer
3k
views
What was PHP's "o" serialization format for?
The list of backwards-incompatible changes for PHP 7.4 contain the following note:
Serialization
The o serialization format has been removed. As it is never produced by PHP, this may only break ...
4
votes
0
answers
320
views
What userland strings get automatically interned by PHP?
I was trying to get a better understanding of PHP's internal mechanisms of string interning - more specifically:
What are the rules PHP uses to determine whether (or not) the string created in ...
1
vote
1
answer
508
views
What are the limits on session names in PHP?
The PHP docs on session_name() say:
It should contain only alphanumeric characters; it should be short and descriptive (i.e. for users with enabled cookie warnings). ... The session name can't ...
2
votes
0
answers
341
views
how to allocate & deallocate memory in php?
I'm trying to allocate memory dynamically in my code and release them ,I tried to use zend_mm but I couldn't add it to php 7,I'm using php 7.4 and xampp server , if it is impossible please tell my the ...
1
vote
1
answer
507
views
How can I overwrite an internal Zend function with a PHP extension?
Hope this isn't too silly a question to ask. I'm fairly new to C and PHP internals but looking to learn more about them.
I've recently began looking into development of PHP extensions. I'm trying to ...
0
votes
1
answer
77
views
Passing HashTable data from php.ini to an extension method: corrupted values
I am trying to make a PHP (7.4) extension use in an extension method a setting from php.ini (like myext.map=key1=val1,key2=val2;) parsed as an associative array. I want the parsing to happen in ...
0
votes
1
answer
92
views
Are `zval *retval` argument and the `zval *` return value of the `zend_call_method` the same?
Is the zval * value returned by the zend api method zend_call_method same as the zval *retval argument passed into it?
I can see that zend_call_method is declared in zend_interfaces.h. I tried ...
4
votes
1
answer
700
views
Why does php allow invalid return type declerations it knows it can't allow?
As far as I can tell php has the ability to prevent a return type from being declared where it knows it's problematic.
class Foo {
public function __clone(): Baz {
return new Baz;
}
}
...
4
votes
1
answer
930
views
Where is the source code for strlen() function in PHP?
I was looking through php-src/Zend/zend_API.c and couldn't find the source code for the strlen() function in PHP anywhere. Grepping through the code base didn't really help as it's littered with libc ...
2
votes
3
answers
2k
views
How come usort (php) works even when not returning integers?
Yesterday at work I stumbled upon a piece of code that was roughly like this:
uasort($array, function($a, $b) {
return isset($a['sort_code']) && isset($b['sort_code']) && $a['...
8
votes
3
answers
432
views
Duplicate array keys (Notice: member variable "a" returned from __sleep() multiple times)
The title may seem a bit silly but I'm totally serious with this. Today at work I came across a weird PHP behaviour which I could not explain. Luckily this behaviour is fixed in PHP 7.4, so it seems ...
2
votes
1
answer
226
views
Does mysqli_close() do anything other than just destroying the object?
I know that using mysqli_close() is not needed, because PHP will destruct the object when the script is finished.
What I would like to know is why do we have such a function in the language in the ...
0
votes
1
answer
425
views
Segfault Error when using zend_call_function()
i am trying to warp a C library around a PHP class using PHP's Zend Engine. The constructor function of the class is supposed to take a string and a function pointer. I was able to fetch strings ...
1
vote
1
answer
277
views
What is causing this strange memory corruption in my test PHP extension?
I recently needed a list of compiled-in signal names so I could print nice messages like "Interrupted by SIGINT (2)".
get_defined_constants() is unusable for this as it jumbles SIGINT, SIGTRAP etc in ...
2
votes
1
answer
540
views
pdo_module.obj : error LNK2019: unresolved external symbol "int __cdecl php_pdo_register_driver(struct pdo_driver_t *)"
LINK: unresolved external symbol :php_pdo_register_driver
I'm writing a PHP PDO ext demo with PHP7.2.21, when I tried to register my ext on PDO, I got an error.
PHP_MINIT_FUNCTION(pdo_my_mysql) {
#...
0
votes
1
answer
162
views
Is there a way in php to count the nested stucture level?
I'm experimenting with a way to more easily debug Cronjob Scripts with PHP.
without having xdebug etc. accessible on the server.
For this, I'd like to get the number of nested structures the code ...
0
votes
0
answers
52
views
PHP API Reflection
I want to find where such messages are generated at a low level.
Uncaught TypeError: Argument 1 passed to A::__construct() must be an instance of B
I downloaded the source PHP 7. And tried to find ...
11
votes
2
answers
1k
views
Why is in_array strict mode on integers slower than non-strict mode?
I always thought that in_array strict mode will be faster or at least the same speed as non-strict mode. But after some benchmarks I noticed there is a huge difference in execution time between them ...
4
votes
1
answer
371
views
Why increasing refcount of zval not working?
I'm dumping a zval container running on PHP version 7.3.5 (opcache is activated and PHP is thread safe enabled) following this given code :
<?php
$a = "new string";
$b = $a;
xdebug_debug_zval( '...
0
votes
0
answers
53
views
Tag a data to curl HTTP request in PHP C++ extension
I have a PHP C++ extension that monitors the web requests and captures the required request details with Call stacks.
Here from my PHP C++ extension whenever curl_exec(..) happens and a HTTP ...
2
votes
1
answer
265
views
Getting function argument value from PHP extension in c++
I have created php extension in c++.In version php 5.6 can able to get currently executed function details. I was getting the arguments value as follows,
if (real_execute_data->function_state....
1
vote
0
answers
43
views
What is the role of uninitialized_zval in the PHP kernel?
uninitialized_zval appears in multiple places in the PHP kernel, but I don't know what it does. For example, in the ZEND_ASSIGN_DIM_SPEC_CV_UNUSED_OP_DATA_CONST_HANDLER handler:
...
5
votes
2
answers
1k
views
Which PHP functions are affected by allow_url_fopen?
In PHP, the allow_url_fopen flag controls whether or not remote URLs can be used by various file system functions, in order to access remote files.
It is recommended security best practice nowadays ...
1
vote
1
answer
410
views
What goes in the PHP root buffer and what happens if it gets bigger than 10K
I have a long-running PHP script that seems to have a memory leak and that got me diving into how PHP garbage collection works. I had some questions about it and maybe there are some people on here ...
0
votes
1
answer
88
views
Object Iteration [closed]
I know that iteration over an object is equal to iterating over the visible properties of the class.
class MyClass
{
public $var1 = 'value 1';
public $var2 = 'value 2';
public $var3 = '...
0
votes
1
answer
202
views
How to read this function in C?
While reading about PHP Zend Engine internals, I came across function
zend_parse_parameters() which is used as the following
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l", &number) ...
2
votes
0
answers
2k
views
The Zend Engine API version 320170718 which is installed, is newer
I am currently experiencing a problem with xdebug. I wanted to do a
php bin/console cache:clear
for my Symfony application but it got me this error:
Warning: Xdebug MUST be loaded as a Zend ...
3
votes
2
answers
343
views
Which is faster between (string)$value and "$value" when casting to a string
In PHP, assuming $value = 12345;(an integer), which is faster when casting $value from an integer to a string;
$value = (string)$value;
or
$value = "$value";
This is a kind of performance measure ...
2
votes
2
answers
293
views
PHP7 hashtable internal structure
There is very efficient assoc. array C language implementation used in php source code.
/*
* HashTable Data Layout
* =====================
*
* +=============================+
* ...
0
votes
0
answers
45
views
what is the functionality of `/* $Id$ */` in php-src files
It's included in many files.
For example:
/* $Id: php_cli.c 306938 2011-01-01 02:17:06Z felipe $ */
Is this helping debug process or something else? Any tool related?
1
vote
2
answers
248
views
Fetch the function return value in PHP extension C++
I have created an php extension in c++ which tracks the call graph of each request(centos7-64 bit,PHP5.6).And now,I want to get the function return value of each function.
It can be done by using ...
2
votes
0
answers
207
views
What is the proper way to add elements to an empty array passed to an extension function in PHP 7.3?
I'm trying to port an old PHP extension of mine working for PHP 5.4 to PHP 7.3 (7.3.0 RC3 more precisely).
I'm building the extension using Visual Studio 2017 on Windows 10 Pro x64, building both for ...
2
votes
0
answers
166
views
Apache, mod_php, and MINIT
When running PHP programs using mod_php, when does PHP call its extension's MINIT functions? Does this happen
When the apache web server restarts?
Whenever apache spins up a new thread pool to ...
0
votes
1
answer
722
views
var_dump(object) results "*RECURSION*"
I'm write simple extension with class definition
extension.h
zend_class_entry * ExampleClass_class;
zend_class_entry * get_ExampleClass_class();
extension.c
#include "php.h"
#include "extension.h"
...
29
votes
0
answers
1k
views
Pre-compiling PHP files [closed]
As a learning exercise, I'm trying to save the compiled state of a PHP file in order to execute it at a later time without having to go through zend_compile_file again.
The first thing I did was ...
0
votes
1
answer
115
views
How does Zend recognize a variable by specify the dollar prefix when parse it?
I currently knows how Zend parse operators by reading the Zend/zend_language_parser.y file of php-src. But I'm very confusing about how variables are recognized.
The Bison token is:
%token <ast&...
0
votes
1
answer
671
views
What do exactly mean by "PHP compilation options"?
I'm using PHP 7.2.8 on my laptop that runs on Windows 10 Home Single Language 64-bit Operating System
I've installed PHP 7.2.8 on my laptop using the latest copy of XAMPP installer.
I come across ...
0
votes
0
answers
26
views
Where the CGI is engaged in Zend Engine code compiling [duplicate]
I am trying to get deeper in the zend engine and the whole server processes at all
and from what I understood is - when I send a request to the server, the Zend Engine first engages the scanning\...
-1
votes
1
answer
34
views
PHP Double comparision
PHP Version 7.1.7 / Laravel 5.4
dump($this_tour->payments_to_operator_sum());
1012.0
dump(gettype($this_tour->payments_to_operator_sum()));
"double"
dump($this_tour->operator_price, ...