Add PHP 8.5 support

Updated calls to resource cleanup functions (curl_close, imagedestroy, finfo_close) to only execute for PHP versions below 8.0, as these functions have no effect in PHP 8+. Improved error handling and connection management in mysqli and sqlite drivers, and added missing DOCTYPE in error output for better HTML compliance.
This commit is contained in:
Hani Rouatbi
2025-12-06 15:51:41 +01:00
parent 3cdfa9ce5a
commit e47cf056a0
8 changed files with 66 additions and 16 deletions

View File

@@ -131,7 +131,12 @@ class FetchFile
kleeja_log(sprintf("cUrl error (#%d): %s\n", curl_errno($ch), htmlspecialchars(curl_error($ch))));
}
curl_close($ch);
// curl_close() has no effect since PHP 8.0
// Only call it for PHP < 8.0 where it actually closes the handle
if (PHP_VERSION_ID < 80000)
{
curl_close($ch);
}
fclose($out);
return isset($error) ? false : true;
@@ -146,7 +151,12 @@ class FetchFile
kleeja_log(sprintf("FetchFile error (curl: #%d): %s\n", curl_errno($ch), htmlspecialchars(curl_error($ch))));
}
curl_close($ch);
// curl_close() has no effect since PHP 8.0
// Only call it for PHP < 8.0 where it actually closes the handle
if (PHP_VERSION_ID < 80000)
{
curl_close($ch);
}
return isset($error) ? false : $data;
}

View File

@@ -101,7 +101,12 @@ function kleeja_cpatcha_image()
imagepng($image);
//Free up resources
imagedestroy($image);
// imagedestroy() has no effect since PHP 8.0
// Only call it for PHP < 8.0 where it actually frees memory
if (PHP_VERSION_ID < 80000)
{
imagedestroy($image);
}
}
//<--- EOF

View File

@@ -66,9 +66,15 @@ error_reporting(defined('DEV_STAGE') ? E_ALL : E_ALL ^ E_NOTICE);
*/
function kleeja_show_error($error_number, $error_string = '', $error_file = '', $error_line = '')
{
// Check if error reporting is disabled (happens with @ operator)
if (!(error_reporting() & $error_number))
{
return false;
}
switch ($error_number)
{
case E_NOTICE: case E_WARNING: case E_USER_WARNING: case E_USER_NOTICE: case E_STRICT:
case E_NOTICE: case E_WARNING: case E_USER_WARNING: case E_USER_NOTICE: case 2048: // E_STRICT (deprecated in PHP 8.4, using numeric value for compatibility)
if (function_exists('kleeja_log'))
{
$error_name = [
@@ -81,6 +87,7 @@ function kleeja_show_error($error_number, $error_string = '', $error_file = '',
default:
header('HTTP/1.1 503 Service Temporarily Unavailable');
echo '<!DOCTYPE html>' . "\n";
echo '<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">' . "\n<head>\n";
echo '<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />' . "\n";
echo '<title>Kleeja Error</title>' . "\n" . '<style type="text/css">' . "\n\t";

View File

@@ -335,6 +335,7 @@ function kleeja_debug()
function big_error($error_title, $msg_text, $error = true)
{
global $SQL;
echo '<!DOCTYPE html>' . "\n";
echo '<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">' . "\n";
echo '<head>' . "\n";
echo '<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />' . "\n";

View File

@@ -94,10 +94,9 @@ if (! defined('SQL_LAYER')):
public function is_connected()
{
return ! (is_resource($this->connect_id) || empty($this->connect_id));
return is_object($this->connect_id);
}
// close the connection
public function close()
{
if (! $this->is_connected())
@@ -114,12 +113,16 @@ if (! defined('SQL_LAYER')):
//loggin -> close connection
kleeja_log('[Closing connection] : ' . kleeja_get_page());
if (! is_resource($this->connect_id))
// Close the mysqli connection only once.
// After closing, reset $this->connect_id so subsequent calls are no-ops.
$result = @mysqli_close($this->connect_id);
if ($result)
{
return true;
$this->connect_id = null;
}
return @mysqli_close($this->connect_id);
return $result;
}
// encoding functions
@@ -130,11 +133,21 @@ if (! defined('SQL_LAYER')):
public function set_names($charset)
{
if (! $this->is_connected())
{
return false;
}
@mysqli_set_charset($this->connect_id, $charset);
}
public function client_encoding()
{
if (! $this->is_connected())
{
return false;
}
return mysqli_character_set_name($this->connect_id);
}

View File

@@ -91,7 +91,7 @@ if (! defined('SQL_LAYER')):
public function is_connected()
{
return ! (is_null($this->connect_id) || empty($this->connect_id));
return is_object($this->connect_id);
}
// close the connection
@@ -111,12 +111,16 @@ if (! defined('SQL_LAYER')):
//loggin -> close connection
kleeja_log('[Closing connection] : ' . kleeja_get_page());
if (! is_resource($this->connect_id))
// Close the SQLite3 connection only once.
// After closing, reset $this->connect_id so subsequent calls are no-ops.
$result = @$this->connect_id->close();
if ($result)
{
return true;
$this->connect_id = null;
}
return @mysqli_close($this->connect_id);
return $result;
}
// encoding functions

View File

@@ -226,7 +226,12 @@ function check_mime_type($given_file_mime, $file_ext, $file_path)
{
$f_info = finfo_open(FILEINFO_MIME_TYPE);
$mime = finfo_file($f_info, $file_path);
finfo_close($f_info);
// finfo_close() has no effect since PHP 8.0
// Only call it for PHP < 8.0 where it actually closes the resource
if (PHP_VERSION_ID < 80000)
{
finfo_close($f_info);
}
}
}
elseif (! empty($given_file_mime))

View File

@@ -178,8 +178,13 @@ function helper_thumb($source_path, $ext, $dest_image, $dw, $dh)
$return = false;
}
@imagedestroy($desired_gdim);
@imagedestroy($source_gdim);
// imagedestroy() has no effect since PHP 8.0
// Only call it for PHP < 8.0 where it actually frees memory
if (PHP_VERSION_ID < 80000)
{
imagedestroy($desired_gdim);
imagedestroy($source_gdim);
}
return $return;
}