運行效果如圖:
最近被好多人問,本來運行的好好的,突然swoole就啟動不了了。
本工具為愛發電,如果工具正好解決了您的需求。我會很開心
代碼如下:
"""
本腳本為愛發電
by:網前雨刮器
"""
import subprocess
import re
def check_php_environment():
def check_php_version():
try:
output = subprocess.check_output(['php', '-v'], stderr=subprocess.STDOUT)
result = output.decode('utf-8')
php_version_str = result.split('\n')[0]
php_version = php_version_str.lower().split(' ')[1]
if php_version.startswith('7.'):
major_version, minor_version, patch_version = map(int, php_version.split('.'))
if 7 <= major_version <= 7 and 1 <= minor_version <= 4:
print(f"\033[32mPHP版本通過 (當前版本:{php_version})\033[0m")
else:
print(f"\033[31mPHP版本不通過 (當前版本:{php_version})\033[0m")
else:
print(f"\033[31mPHP版本不通過 (當前版本:{php_version})\033[0m")
except subprocess.CalledProcessError as e:
return None
def check_php_extension(extension_name, expected_version=None):
try:
output = subprocess.check_output(['php', '-m'], stderr=subprocess.STDOUT)
result = output.decode('utf-8')
installed_extensions = result.split()
if extension_name in installed_extensions:
print(f"\033[32m{extension_name} 已安裝\033[0m")
if expected_version is not None:
output = subprocess.check_output(['php', '--ri', extension_name], stderr=subprocess.STDOUT)
result = output.decode('utf-8')
match = re.search(r"Version => (.+)", result)
if match:
version = match.group(1).strip()
print(f"\033[32m{extension_name} 版本號為 {version}\033[0m")
if not re.match(expected_version.replace("*", r"\d+"), version):
return None
# print(f"報錯:{extension_name} 擴展的版本號不滿足要求")
else:
return None
#print(f"無法獲取 {extension_name} 擴展的版本信息")
else:
print(f"\033[31m{extension_name} 擴展未安裝\033[0m")
except subprocess.CalledProcessError as e:
print(f"無法執行命令: {e.output}")
def check_proc_open():
try:
output = subprocess.check_output(['php', '-i'], stderr=subprocess.STDOUT)
result = output.decode('utf-8')
if 'disable_functions' in result:
disable_functions = result.split('disable_functions => ')[1].split(' =>')[0]
if 'proc_open' in disable_functions:
print("\033[31mproc_open 函數已被禁用\033[0m")
else:
print("\033[32mproc_open 函數未被禁用\033[0m")
else:
print("無法獲取禁用函數列表")
except subprocess.CalledProcessError as e:
print(f"無法執行命令: {e.output}")
def check_mysql_version():
try:
output = subprocess.check_output(['mysql', '-V'], stderr=subprocess.STDOUT)
result = output.decode('utf-8')
version_match = re.search(r"\d+\.\d+\.\d+", result)
if version_match:
mysql_version = version_match.group(0)
if mysql_version.startswith('5.6.') or mysql_version.startswith('5.7.'):
print(f"\033[32mMySQL 版本通過 (當前版本:{mysql_version})\033[0m")
else:
print(f"\033[31mMySQL 版本不通過 (當前版本:{mysql_version})\033[0m")
else:
print("\033[31m無法獲取MySQL 版本號\033[0m")
except subprocess.CalledProcessError as e:
print(f"無法執行命令: {e.output}")
def check_web_server():
try:
apache_process = subprocess.check_output(['ps', '-ef']).decode('utf-8')
if 'apache2' in apache_process or 'httpd' in apache_process:
print("\033[32m當前環境為 Apache (建議使用Nginx)\033[0m")
return
nginx_process = subprocess.check_output(['ps', '-ef']).decode('utf-8')
if 'nginx' in nginx_process:
print("\033[32m當前環境為 Nginx\033[0m")
return
print("\033[31m未檢測到 Apache 或 Nginx 進程\033[0m")
except subprocess.CalledProcessError as e:
print(f"無法執行命令: {e.output}")
print('')
check_php_version()
print('')
check_proc_open()
print('')
check_php_extension('redis')
print('')
check_php_extension('fileinfo')
print('')
check_php_extension('swoole')
print('')
check_php_extension('swoole_loader', '3.0.\d+')
print('')
check_mysql_version()
print('')
check_web_server()
print('')
print('---------------------------------------------------------------------------------')
print('')
print("\033[33m注:請確定當前PHP命令行版本與你安裝的PHP版本一致\033[0m")
print("\033[33m注:如果你確定以上擴展已經安裝并配置,請重啟php、必要時重啟服務器\033[0m")
print("\033[33m本腳本為愛發電\033[0m")
print("\033[33mby:網前雨刮器\033[0m")
check_php_environment()
如果您不會使用python 不會配置python環境,可以使用我已經打包好的程序
使用方法如下:
將程序放在服務器下,直接“./文件名” 運行即可。