


PHP error: Exception thrown without a stack frame in Unknown on line 0[Reprinted],thrownstack_PHP tutorial
PHP error: Exception thrown without a stack frame in Unknown on line 0 [Reprinted], thrownstack
From: NetEase Blog
As far as I know, In two cases, PHP will report the error Exception thrown without a stack frame in Unknown on line 0:
1) Exception capture uses the set_exception_handler guide, and another Exception is executed inside the Exception
As shown in the following code , this problem will occur:
http://de.php.net/manual/de/function.set-exception-handler.php#88082
<span>function</span> error_handler(<span>$code</span>, <span>$message</span>, <span>$file</span>, <span>$line</span><span>) { </span><span>if</span> (0 == <span>error_reporting</span><span>()) </span><span>return</span><span>; </span><span>throw</span> <span>new</span> ErrorException(<span>$message</span>, 0, <span>$code</span>, <span>$file</span>, <span>$line</span><span>); } </span><span>function</span> exception_handler(<span>$e</span><span>) { </span><span>//</span><span> ... normal exception stuff goes here</span> <span>print</span> <span>$undefined</span>; <span>//</span><span> This is the underlying problem</span> <span>} </span><span>set_error_handler</span>("error_handler"<span>); </span><span>set_exception_handler</span>("exception_handler"<span>); </span><span>throw</span> <span>new</span> <span>Exception</span>("Just invoking the exception handler");
Print $undefined in the exception_handler function; This line itself will throw an exception, and he calls the exception_handler function of set_exception_handler, creating an infinite loop.
Solution: Do not execute another Exception inside an Exception
The above problem can be solved using try...catch. For example, the exception_handler can be changed to the following:
<span>function</span> exception_handler(<span>$e</span><span>) { </span><span>try</span><span> { </span><span>//</span><span> ... normal exception stuff goes here</span> <span>print</span> <span>$undefined</span>; <span>//</span><span> This is the underlying problem</span> <span> } </span><span>catch</span> (<span>Exception</span> <span>$e</span><span>) { </span><span>print</span> <span>get_class</span>(<span>$e</span>)." thrown within the exception handler. Message: ".<span>$e</span>->getMessage()." on line ".<span>$e</span>-><span>getLine(); } }</span>
2) Throw an exception in the destructor
Refer to this bug: http://bugs.php.net/bug.php?id=33598
The following code will report this error:
<span>class</span><span> test { </span><span>function</span><span> __construct() { </span><span>echo</span> "Construct\n"<span>; } </span><span>function</span><span> greet() { </span><span>echo</span> "Hello World\n"<span>; } </span><span>function</span><span> __destruct() { </span><span>echo</span> "Destruct\n"<span>; </span><span>throw</span> <span>new</span> <span>Exception</span>( 'test'<span> ); } } </span><span>$test</span> = <span>new</span><span> test(); </span><span>$test</span>->greet();
Current solution:
1. Do not throw exceptions in the destructor.
2. Since the destructor is executed when exiting, you must manually unset this class and catch the exception.
For example, in the above example, add a line of unset($test) at the end, then the program will report throw new Exception( 'test' ); There is an error in this line, and then catch this exception.
The above two situations will occur in PHP 5.2.11 version. As for the reason, I think PHP may handle it this way. PHP bug 33598 was reported in 2005. The bug Status is Closed, indicating that the official does not think this is the case. A bug, or a bug not handled properly.
If this file is not included in another file. . You can try the following.
Do not encode the file in UTF-8. .
Move your code below to the top. . There is no HTML code in the PHP file you included anyway.
Check your php.ini and pay attention to the path where the SESSION temporary file is saved, whether it can be accessed by PHP.
The encodings are different, some are UTF-8, and some are Unicode, so they will appear as garbled characters. When inserting into the database, set it to UTF-8. Just use UTF-8 when reading it out.

Hot AI Tools

Undresser.AI Undress
AI-powered app for creating realistic nude photos

AI Clothes Remover
Online AI tool for removing clothes from photos.

Undress AI Tool
Undress images for free

Clothoff.io
AI clothes remover

AI Hentai Generator
Generate AI Hentai for free.

Hot Article

Hot Tools

Notepad++7.3.1
Easy-to-use and free code editor

SublimeText3 Chinese version
Chinese version, very easy to use

Zend Studio 13.0.1
Powerful PHP integrated development environment

Dreamweaver CS6
Visual web development tools

SublimeText3 Mac version
God-level code editing software (SublimeText3)

Hot Topics

The problem was found in the springboot project production session-out timeout. The problem is described below: In the test environment, the session-out was configured by changing the application.yaml. After setting different times to verify that the session-out configuration took effect, the expiration time was directly set to 8 hours for release. Arrived in production environment. However, I received feedback from customers at noon that the project expiration time was set to be short. If no operation is performed for half an hour, the session will expire and require repeated logins. Solve the problem of handling the development environment: the springboot project has built-in Tomcat, so the session-out configured in application.yaml in the project is effective. Production environment: Production environment release is

Session failure is usually caused by the session lifetime expiration or server shutdown. The solutions: 1. Extend the lifetime of the session; 2. Use persistent storage; 3. Use cookies; 4. Update the session asynchronously; 5. Use session management middleware.

Solution to the cross-domain problem of PHPSession In the development of front-end and back-end separation, cross-domain requests have become the norm. When dealing with cross-domain issues, we usually involve the use and management of sessions. However, due to browser origin policy restrictions, sessions cannot be shared by default across domains. In order to solve this problem, we need to use some techniques and methods to achieve cross-domain sharing of sessions. 1. The most common use of cookies to share sessions across domains

Solution to the problem that the php session disappears after refreshing: 1. Open the session through "session_start();"; 2. Write all public configurations in a php file; 3. The variable name cannot be the same as the array subscript; 4. In Just check the storage path of the session data in phpinfo and check whether the sessio in the file directory is saved successfully.

The default expiration time of session PHP is 1440 seconds, which is 24 minutes, which means that if the client does not refresh for more than 24 minutes, the current session will expire; if the user closes the browser, the session will end and the Session will no longer exist.

When you are using a PHP session (Session), sometimes you will find that the Session can be read normally in one file, but cannot be read in another file. This may confuse you since session data is supposed to be shared across the entire application. This article will explain how to correctly read and write PHP session data in multiple files.

1. Implementing SMS login based on session 1.1 SMS login flow chart 1.2 Implementing sending SMS verification code Front-end request description: Description of request method POST request path /user/code request parameter phone (phone number) return value No back-end interface implementation: @Slf4j@ ServicepublicclassUserServiceImplextendsServiceImplimplementsIUserService{@OverridepublicResultsendCode(Stringphone,HttpSessionsession){//1. Verify mobile phone number if

Problem: Today, we encountered a setting timeout problem in our project, and changes to SpringBoot2’s application.properties never took effect. Solution: The server.* properties are used to control the embedded container used by SpringBoot. SpringBoot will create an instance of the servlet container using one of the ServletWebServerFactory instances. These classes use server.* properties to configure the controlled servlet container (tomcat, jetty, etc.). When the application is deployed as a war file to a Tomcat instance, the server.* properties do not apply. They do not apply,
