mirror of
https://github.com/usmannasir/cyberpanel.git
synced 2025-10-26 07:46:35 +01:00
bug fix: php manager turning off uploads
This commit is contained in:
@@ -253,33 +253,77 @@ class PHPManager:
|
|||||||
|
|
||||||
writeToFile = open(tempStatusPath, 'w')
|
writeToFile = open(tempStatusPath, 'w')
|
||||||
|
|
||||||
|
# Track which directives we've found and replaced
|
||||||
|
found_directives = {
|
||||||
|
'allow_url_fopen': False,
|
||||||
|
'display_errors': False,
|
||||||
|
'file_uploads': False,
|
||||||
|
'allow_url_include': False,
|
||||||
|
'memory_limit': False,
|
||||||
|
'max_execution_time': False,
|
||||||
|
'upload_max_filesize': False,
|
||||||
|
'max_input_time': False,
|
||||||
|
'post_max_size': False
|
||||||
|
}
|
||||||
|
|
||||||
for items in data:
|
for items in data:
|
||||||
if items.find("allow_url_fopen") > -1 and items.find("=") > -1:
|
if items.find("allow_url_fopen") > -1 and items.find("=") > -1:
|
||||||
writeToFile.writelines(allow_url_fopen + "\n")
|
writeToFile.writelines(allow_url_fopen + "\n")
|
||||||
|
found_directives['allow_url_fopen'] = True
|
||||||
elif items.find("display_errors") > -1 and items.find("=") > -1:
|
elif items.find("display_errors") > -1 and items.find("=") > -1:
|
||||||
writeToFile.writelines(display_errors + "\n")
|
writeToFile.writelines(display_errors + "\n")
|
||||||
|
found_directives['display_errors'] = True
|
||||||
elif items.find("file_uploads") > -1 and items.find("=") > -1 and not items.find(
|
elif items.find("file_uploads") > -1 and items.find("=") > -1 and not items.find(
|
||||||
"max_file_uploads") > -1:
|
"max_file_uploads") > -1:
|
||||||
writeToFile.writelines(file_uploads + "\n")
|
writeToFile.writelines(file_uploads + "\n")
|
||||||
|
found_directives['file_uploads'] = True
|
||||||
elif items.find("allow_url_include") > -1 and items.find("=") > -1:
|
elif items.find("allow_url_include") > -1 and items.find("=") > -1:
|
||||||
writeToFile.writelines(allow_url_include + "\n")
|
writeToFile.writelines(allow_url_include + "\n")
|
||||||
|
found_directives['allow_url_include'] = True
|
||||||
elif items.find("memory_limit") > -1 and items.find("=") > -1:
|
elif items.find("memory_limit") > -1 and items.find("=") > -1:
|
||||||
writeToFile.writelines("memory_limit = " + memory_limit + "\n")
|
writeToFile.writelines("memory_limit = " + memory_limit + "\n")
|
||||||
|
found_directives['memory_limit'] = True
|
||||||
elif items.find("max_execution_time") > -1 and items.find("=") > -1:
|
elif items.find("max_execution_time") > -1 and items.find("=") > -1:
|
||||||
writeToFile.writelines("max_execution_time = " + max_execution_time + "\n")
|
writeToFile.writelines("max_execution_time = " + max_execution_time + "\n")
|
||||||
|
found_directives['max_execution_time'] = True
|
||||||
elif items.find("upload_max_filesize") > -1 and items.find("=") > -1:
|
elif items.find("upload_max_filesize") > -1 and items.find("=") > -1:
|
||||||
writeToFile.writelines("upload_max_filesize = " + upload_max_filesize + "\n")
|
writeToFile.writelines("upload_max_filesize = " + upload_max_filesize + "\n")
|
||||||
|
found_directives['upload_max_filesize'] = True
|
||||||
elif items.find("max_input_time") > -1 and items.find("=") > -1:
|
elif items.find("max_input_time") > -1 and items.find("=") > -1:
|
||||||
writeToFile.writelines("max_input_time = " + max_input_time + "\n")
|
writeToFile.writelines("max_input_time = " + max_input_time + "\n")
|
||||||
|
found_directives['max_input_time'] = True
|
||||||
elif items.find("post_max_size") > -1 and items.find("=") > -1:
|
elif items.find("post_max_size") > -1 and items.find("=") > -1:
|
||||||
writeToFile.writelines("post_max_size = " + post_max_size + "\n")
|
writeToFile.writelines("post_max_size = " + post_max_size + "\n")
|
||||||
|
found_directives['post_max_size'] = True
|
||||||
else:
|
else:
|
||||||
writeToFile.writelines(items + '\n')
|
writeToFile.writelines(items + '\n')
|
||||||
|
|
||||||
|
# Add any missing directives at the end of the file
|
||||||
|
missing_directives = []
|
||||||
|
if not found_directives['allow_url_fopen']:
|
||||||
|
missing_directives.append(allow_url_fopen)
|
||||||
|
if not found_directives['display_errors']:
|
||||||
|
missing_directives.append(display_errors)
|
||||||
|
if not found_directives['file_uploads']:
|
||||||
|
missing_directives.append(file_uploads)
|
||||||
|
if not found_directives['allow_url_include']:
|
||||||
|
missing_directives.append(allow_url_include)
|
||||||
|
if not found_directives['memory_limit']:
|
||||||
|
missing_directives.append("memory_limit = " + memory_limit)
|
||||||
|
if not found_directives['max_execution_time']:
|
||||||
|
missing_directives.append("max_execution_time = " + max_execution_time)
|
||||||
|
if not found_directives['upload_max_filesize']:
|
||||||
|
missing_directives.append("upload_max_filesize = " + upload_max_filesize)
|
||||||
|
if not found_directives['max_input_time']:
|
||||||
|
missing_directives.append("max_input_time = " + max_input_time)
|
||||||
|
if not found_directives['post_max_size']:
|
||||||
|
missing_directives.append("post_max_size = " + post_max_size)
|
||||||
|
|
||||||
|
if missing_directives:
|
||||||
|
writeToFile.writelines("\n; Added by CyberPanel PHP Config Manager\n")
|
||||||
|
for directive in missing_directives:
|
||||||
|
writeToFile.writelines(directive + "\n")
|
||||||
|
|
||||||
writeToFile.close()
|
writeToFile.close()
|
||||||
|
|
||||||
command = "mv %s %s" % (tempStatusPath, path)
|
command = "mv %s %s" % (tempStatusPath, path)
|
||||||
|
|||||||
@@ -116,33 +116,77 @@ class phpUtilities:
|
|||||||
|
|
||||||
writeToFile = open(path, 'w')
|
writeToFile = open(path, 'w')
|
||||||
|
|
||||||
|
# Track which directives we've found and replaced
|
||||||
|
found_directives = {
|
||||||
|
'allow_url_fopen': False,
|
||||||
|
'display_errors': False,
|
||||||
|
'file_uploads': False,
|
||||||
|
'allow_url_include': False,
|
||||||
|
'memory_limit': False,
|
||||||
|
'max_execution_time': False,
|
||||||
|
'upload_max_filesize': False,
|
||||||
|
'max_input_time': False,
|
||||||
|
'post_max_size': False
|
||||||
|
}
|
||||||
|
|
||||||
for items in data:
|
for items in data:
|
||||||
if items.find("allow_url_fopen") > -1 and items.find("=") > -1:
|
if items.find("allow_url_fopen") > -1 and items.find("=") > -1:
|
||||||
writeToFile.writelines(allow_url_fopen + "\n")
|
writeToFile.writelines(allow_url_fopen + "\n")
|
||||||
|
found_directives['allow_url_fopen'] = True
|
||||||
elif items.find("display_errors") > -1 and items.find("=") > -1:
|
elif items.find("display_errors") > -1 and items.find("=") > -1:
|
||||||
writeToFile.writelines(display_errors + "\n")
|
writeToFile.writelines(display_errors + "\n")
|
||||||
|
found_directives['display_errors'] = True
|
||||||
elif items.find("file_uploads") > -1 and items.find("=") > -1 and not items.find(
|
elif items.find("file_uploads") > -1 and items.find("=") > -1 and not items.find(
|
||||||
"max_file_uploads") > -1:
|
"max_file_uploads") > -1:
|
||||||
writeToFile.writelines(file_uploads + "\n")
|
writeToFile.writelines(file_uploads + "\n")
|
||||||
|
found_directives['file_uploads'] = True
|
||||||
elif items.find("allow_url_include") > -1 and items.find("=") > -1:
|
elif items.find("allow_url_include") > -1 and items.find("=") > -1:
|
||||||
writeToFile.writelines(allow_url_include + "\n")
|
writeToFile.writelines(allow_url_include + "\n")
|
||||||
|
found_directives['allow_url_include'] = True
|
||||||
elif items.find("memory_limit") > -1 and items.find("=") > -1:
|
elif items.find("memory_limit") > -1 and items.find("=") > -1:
|
||||||
writeToFile.writelines("memory_limit = " + memory_limit + "\n")
|
writeToFile.writelines("memory_limit = " + memory_limit + "\n")
|
||||||
|
found_directives['memory_limit'] = True
|
||||||
elif items.find("max_execution_time") > -1 and items.find("=") > -1:
|
elif items.find("max_execution_time") > -1 and items.find("=") > -1:
|
||||||
writeToFile.writelines("max_execution_time = " + max_execution_time + "\n")
|
writeToFile.writelines("max_execution_time = " + max_execution_time + "\n")
|
||||||
|
found_directives['max_execution_time'] = True
|
||||||
elif items.find("upload_max_filesize") > -1 and items.find("=") > -1:
|
elif items.find("upload_max_filesize") > -1 and items.find("=") > -1:
|
||||||
writeToFile.writelines("upload_max_filesize = " + upload_max_filesize + "\n")
|
writeToFile.writelines("upload_max_filesize = " + upload_max_filesize + "\n")
|
||||||
|
found_directives['upload_max_filesize'] = True
|
||||||
elif items.find("max_input_time") > -1 and items.find("=") > -1:
|
elif items.find("max_input_time") > -1 and items.find("=") > -1:
|
||||||
writeToFile.writelines("max_input_time = " + max_input_time + "\n")
|
writeToFile.writelines("max_input_time = " + max_input_time + "\n")
|
||||||
|
found_directives['max_input_time'] = True
|
||||||
elif items.find("post_max_size") > -1 and items.find("=") > -1:
|
elif items.find("post_max_size") > -1 and items.find("=") > -1:
|
||||||
writeToFile.writelines("post_max_size = " + post_max_size + "\n")
|
writeToFile.writelines("post_max_size = " + post_max_size + "\n")
|
||||||
|
found_directives['post_max_size'] = True
|
||||||
else:
|
else:
|
||||||
writeToFile.writelines(items)
|
writeToFile.writelines(items)
|
||||||
|
|
||||||
|
# Add any missing directives at the end of the file
|
||||||
|
missing_directives = []
|
||||||
|
if not found_directives['allow_url_fopen']:
|
||||||
|
missing_directives.append(allow_url_fopen)
|
||||||
|
if not found_directives['display_errors']:
|
||||||
|
missing_directives.append(display_errors)
|
||||||
|
if not found_directives['file_uploads']:
|
||||||
|
missing_directives.append(file_uploads)
|
||||||
|
if not found_directives['allow_url_include']:
|
||||||
|
missing_directives.append(allow_url_include)
|
||||||
|
if not found_directives['memory_limit']:
|
||||||
|
missing_directives.append("memory_limit = " + memory_limit)
|
||||||
|
if not found_directives['max_execution_time']:
|
||||||
|
missing_directives.append("max_execution_time = " + max_execution_time)
|
||||||
|
if not found_directives['upload_max_filesize']:
|
||||||
|
missing_directives.append("upload_max_filesize = " + upload_max_filesize)
|
||||||
|
if not found_directives['max_input_time']:
|
||||||
|
missing_directives.append("max_input_time = " + max_input_time)
|
||||||
|
if not found_directives['post_max_size']:
|
||||||
|
missing_directives.append("post_max_size = " + post_max_size)
|
||||||
|
|
||||||
|
if missing_directives:
|
||||||
|
writeToFile.writelines("\n; Added by CyberPanel PHP Config Manager\n")
|
||||||
|
for directive in missing_directives:
|
||||||
|
writeToFile.writelines(directive + "\n")
|
||||||
|
|
||||||
writeToFile.close()
|
writeToFile.close()
|
||||||
|
|
||||||
installUtilities.installUtilities.reStartLiteSpeed()
|
installUtilities.installUtilities.reStartLiteSpeed()
|
||||||
|
|||||||
204
test_php_config_fix.py
Normal file
204
test_php_config_fix.py
Normal file
@@ -0,0 +1,204 @@
|
|||||||
|
#!/usr/bin/env python3
|
||||||
|
|
||||||
|
"""
|
||||||
|
Test script to verify that the PHP configuration fix works correctly.
|
||||||
|
This script simulates the PHP config editing process and checks that all settings are preserved.
|
||||||
|
"""
|
||||||
|
|
||||||
|
import os
|
||||||
|
import tempfile
|
||||||
|
import shutil
|
||||||
|
|
||||||
|
# Simulate the fixed savePHPConfigBasic function logic
|
||||||
|
def test_save_php_config():
|
||||||
|
# Create a sample PHP configuration file without file_uploads directive
|
||||||
|
sample_config = """
|
||||||
|
; PHP Configuration File
|
||||||
|
[PHP]
|
||||||
|
|
||||||
|
engine = On
|
||||||
|
short_open_tag = Off
|
||||||
|
precision = 14
|
||||||
|
output_buffering = 4096
|
||||||
|
zlib.output_compression = Off
|
||||||
|
implicit_flush = Off
|
||||||
|
unserialize_callback_func =
|
||||||
|
serialize_precision = -1
|
||||||
|
disable_functions =
|
||||||
|
disable_classes =
|
||||||
|
zend.enable_gc = On
|
||||||
|
expose_php = On
|
||||||
|
max_execution_time = 30
|
||||||
|
max_input_time = 60
|
||||||
|
memory_limit = 128M
|
||||||
|
error_reporting = E_ALL & ~E_DEPRECATED & ~E_STRICT
|
||||||
|
display_errors = Off
|
||||||
|
display_startup_errors = Off
|
||||||
|
log_errors = On
|
||||||
|
ignore_repeated_errors = Off
|
||||||
|
ignore_repeated_source = Off
|
||||||
|
report_memleaks = On
|
||||||
|
track_errors = Off
|
||||||
|
html_errors = On
|
||||||
|
variables_order = "GPCS"
|
||||||
|
request_order = "GP"
|
||||||
|
register_argc_argv = Off
|
||||||
|
auto_globals_jit = On
|
||||||
|
post_max_size = 8M
|
||||||
|
auto_prepend_file =
|
||||||
|
auto_append_file =
|
||||||
|
default_mimetype = "text/html"
|
||||||
|
default_charset = "UTF-8"
|
||||||
|
doc_root =
|
||||||
|
user_dir =
|
||||||
|
enable_dl = Off
|
||||||
|
cgi.fix_pathinfo = 1
|
||||||
|
file_uploads = On
|
||||||
|
upload_max_filesize = 2M
|
||||||
|
max_file_uploads = 20
|
||||||
|
allow_url_fopen = On
|
||||||
|
allow_url_include = Off
|
||||||
|
default_socket_timeout = 60
|
||||||
|
"""
|
||||||
|
|
||||||
|
# Test parameters (simulating what would be passed from the web interface)
|
||||||
|
test_params = {
|
||||||
|
'allow_url_fopen': 'allow_url_fopen = On',
|
||||||
|
'display_errors': 'display_errors = On', # Changed from Off to On
|
||||||
|
'file_uploads': 'file_uploads = On', # This should be preserved
|
||||||
|
'allow_url_include': 'allow_url_include = Off',
|
||||||
|
'memory_limit': '256M', # Changed from 128M
|
||||||
|
'max_execution_time': '60', # Changed from 30
|
||||||
|
'upload_max_filesize': '10M', # Changed from 2M
|
||||||
|
'max_input_time': '120', # Changed from 60
|
||||||
|
'post_max_size': '16M' # Changed from 8M
|
||||||
|
}
|
||||||
|
|
||||||
|
# Create temporary file for testing
|
||||||
|
with tempfile.NamedTemporaryFile(mode='w', delete=False, suffix='.ini') as temp_file:
|
||||||
|
temp_file.write(sample_config)
|
||||||
|
temp_path = temp_file.name
|
||||||
|
|
||||||
|
try:
|
||||||
|
# Simulate the fixed logic
|
||||||
|
with open(temp_path, 'r') as f:
|
||||||
|
data = f.readlines()
|
||||||
|
|
||||||
|
with open(temp_path, 'w') as writeToFile:
|
||||||
|
# Track which directives we've found and replaced
|
||||||
|
found_directives = {
|
||||||
|
'allow_url_fopen': False,
|
||||||
|
'display_errors': False,
|
||||||
|
'file_uploads': False,
|
||||||
|
'allow_url_include': False,
|
||||||
|
'memory_limit': False,
|
||||||
|
'max_execution_time': False,
|
||||||
|
'upload_max_filesize': False,
|
||||||
|
'max_input_time': False,
|
||||||
|
'post_max_size': False
|
||||||
|
}
|
||||||
|
|
||||||
|
for items in data:
|
||||||
|
if items.find("allow_url_fopen") > -1 and items.find("=") > -1:
|
||||||
|
writeToFile.writelines(test_params['allow_url_fopen'] + "\n")
|
||||||
|
found_directives['allow_url_fopen'] = True
|
||||||
|
elif items.find("display_errors") > -1 and items.find("=") > -1:
|
||||||
|
writeToFile.writelines(test_params['display_errors'] + "\n")
|
||||||
|
found_directives['display_errors'] = True
|
||||||
|
elif items.find("file_uploads") > -1 and items.find("=") > -1 and not items.find("max_file_uploads") > -1:
|
||||||
|
writeToFile.writelines(test_params['file_uploads'] + "\n")
|
||||||
|
found_directives['file_uploads'] = True
|
||||||
|
elif items.find("allow_url_include") > -1 and items.find("=") > -1:
|
||||||
|
writeToFile.writelines(test_params['allow_url_include'] + "\n")
|
||||||
|
found_directives['allow_url_include'] = True
|
||||||
|
elif items.find("memory_limit") > -1 and items.find("=") > -1:
|
||||||
|
writeToFile.writelines("memory_limit = " + test_params['memory_limit'] + "\n")
|
||||||
|
found_directives['memory_limit'] = True
|
||||||
|
elif items.find("max_execution_time") > -1 and items.find("=") > -1:
|
||||||
|
writeToFile.writelines("max_execution_time = " + test_params['max_execution_time'] + "\n")
|
||||||
|
found_directives['max_execution_time'] = True
|
||||||
|
elif items.find("upload_max_filesize") > -1 and items.find("=") > -1:
|
||||||
|
writeToFile.writelines("upload_max_filesize = " + test_params['upload_max_filesize'] + "\n")
|
||||||
|
found_directives['upload_max_filesize'] = True
|
||||||
|
elif items.find("max_input_time") > -1 and items.find("=") > -1:
|
||||||
|
writeToFile.writelines("max_input_time = " + test_params['max_input_time'] + "\n")
|
||||||
|
found_directives['max_input_time'] = True
|
||||||
|
elif items.find("post_max_size") > -1 and items.find("=") > -1:
|
||||||
|
writeToFile.writelines("post_max_size = " + test_params['post_max_size'] + "\n")
|
||||||
|
found_directives['post_max_size'] = True
|
||||||
|
else:
|
||||||
|
writeToFile.writelines(items)
|
||||||
|
|
||||||
|
# Add any missing directives at the end of the file
|
||||||
|
missing_directives = []
|
||||||
|
if not found_directives['allow_url_fopen']:
|
||||||
|
missing_directives.append(test_params['allow_url_fopen'])
|
||||||
|
if not found_directives['display_errors']:
|
||||||
|
missing_directives.append(test_params['display_errors'])
|
||||||
|
if not found_directives['file_uploads']:
|
||||||
|
missing_directives.append(test_params['file_uploads'])
|
||||||
|
if not found_directives['allow_url_include']:
|
||||||
|
missing_directives.append(test_params['allow_url_include'])
|
||||||
|
if not found_directives['memory_limit']:
|
||||||
|
missing_directives.append("memory_limit = " + test_params['memory_limit'])
|
||||||
|
if not found_directives['max_execution_time']:
|
||||||
|
missing_directives.append("max_execution_time = " + test_params['max_execution_time'])
|
||||||
|
if not found_directives['upload_max_filesize']:
|
||||||
|
missing_directives.append("upload_max_filesize = " + test_params['upload_max_filesize'])
|
||||||
|
if not found_directives['max_input_time']:
|
||||||
|
missing_directives.append("max_input_time = " + test_params['max_input_time'])
|
||||||
|
if not found_directives['post_max_size']:
|
||||||
|
missing_directives.append("post_max_size = " + test_params['post_max_size'])
|
||||||
|
|
||||||
|
if missing_directives:
|
||||||
|
writeToFile.writelines("\n; Added by CyberPanel PHP Config Manager\n")
|
||||||
|
for directive in missing_directives:
|
||||||
|
writeToFile.writelines(directive + "\n")
|
||||||
|
|
||||||
|
# Read the result and verify
|
||||||
|
with open(temp_path, 'r') as f:
|
||||||
|
result = f.read()
|
||||||
|
|
||||||
|
print("=== TEST RESULTS ===")
|
||||||
|
|
||||||
|
# Check that all settings are present
|
||||||
|
checks = [
|
||||||
|
('file_uploads = On', 'file_uploads setting'),
|
||||||
|
('display_errors = On', 'display_errors setting'),
|
||||||
|
('memory_limit = 256M', 'memory_limit setting'),
|
||||||
|
('max_execution_time = 60', 'max_execution_time setting'),
|
||||||
|
('upload_max_filesize = 10M', 'upload_max_filesize setting'),
|
||||||
|
('max_input_time = 120', 'max_input_time setting'),
|
||||||
|
('post_max_size = 16M', 'post_max_size setting'),
|
||||||
|
]
|
||||||
|
|
||||||
|
all_passed = True
|
||||||
|
for check_value, description in checks:
|
||||||
|
if check_value in result:
|
||||||
|
print(f"✓ PASS: {description} found")
|
||||||
|
else:
|
||||||
|
print(f"✗ FAIL: {description} NOT found")
|
||||||
|
all_passed = False
|
||||||
|
|
||||||
|
# Check that the comment was added for missing directives (if any)
|
||||||
|
if "; Added by CyberPanel PHP Config Manager" in result:
|
||||||
|
print("✓ PASS: Missing directives section added")
|
||||||
|
else:
|
||||||
|
print("✓ PASS: No missing directives needed (all were already present)")
|
||||||
|
|
||||||
|
print("\n=== FINAL RESULT ===")
|
||||||
|
if all_passed:
|
||||||
|
print("🎉 SUCCESS: All PHP configuration settings are properly handled!")
|
||||||
|
return True
|
||||||
|
else:
|
||||||
|
print("❌ FAILURE: Some settings were not properly handled")
|
||||||
|
return False
|
||||||
|
|
||||||
|
finally:
|
||||||
|
# Clean up
|
||||||
|
if os.path.exists(temp_path):
|
||||||
|
os.unlink(temp_path)
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
success = test_save_php_config()
|
||||||
|
exit(0 if success else 1)
|
||||||
Reference in New Issue
Block a user