dKjddlmZddlZddlZddlZddlZddlmZmZddl m Z ddl m Z m Z ddlmZddlmZmZmZmZddlmZdd lmZdd lmZdd lmZmZmZdd lm Z ed ej!dZ"dZ#e dZ$dee%dee&fdZ'defdZ(defdZ)dee%fdZ*dee%deefdZ+dej,fdZ-dZ.e/dkr e.dSdS))absolute_importN)ListOptional)CageFs)ALT_PHP_PREFIXCLWPOS_VAR_DIR)PHP)create_generic_phpget_alt_php_versions#update_selector_built_in_extensionsdisable_selector_extensions) setup_logging)OBJECT_CACHE_FEATURE)is_module_visible_for_user) PhpIniConfigcreate_pid_file acquire_lock))filter_php_versions_with_not_loaded_redisenable_redis_for_alt_phpz,/var/log/clwpos/enable_redis_for_alt_php.log) caller_name file_level logfile_pathacceleratewp.iniz$/admin/do_not_modify_global_php.flagversionall_inictjtstddSt |}|D]6}t|t}|dt|7dS)Nz Nothing to do custom_logger etc/php.d/) ospathexistsDO_NOT_MODIFY_PHP_GLOBAL_MARKERloggerdebugsupported_alt_phprremove_custom_iniawp_ini)rrsupported_version php_versionphp_ini_configs 2py/clwpos/object_cache/enable_redis_for_alt_php.pyr'r'2s 7>>9 : : _%%%)'22(JJ %kHHH(()?g)?)?IIIIJJr*ct|t}|dt}|d|dS)Nrrr)rr$get_ini_contentr(update_user_ini)r*r+modules_to_syncs r,r0r0=sM!+VDDDN$445K'5K5KLLO""#5GGGGGr-ctt}|d}|stddSdg|z}|di}|D]@}|dkr|d||d<"|d |d |g||<Atd |d |D}td ||d|fd|D}tj ts| d|nLtdtt|| dt|t|jtdS)a Enable 'redis' extension for specified alt-php version by adding 'extension=redis.so' into php.ini file. Also enable 'json' and 'igbinary' extensions if exist which are reqired by 'redis' extension. At the same time: - disable extension in 'php.d.all/.ini' to deny user to enable extension via PHP Selector. - disable extensions in 'php.d/default.ini' to eliminate duplicate loading of extensions. rzetc/php.d.all/redis.iniz2Redis extension is not present in the system, skipNjsonc,|dS)Nredis)endswith)xs r,z(enable_redis_extension..Usqzz'22r-)keyr5zetc/php.d.all/z.inizFinal current modules status: cg|] \}}|| Sr;).0moduler"s r, z*enable_redis_extension..as2 FF r-zExisting extensions: zetc/php.d/default.inic>g|]}||Sr;)is_extension_loaded)r<r=r*s r,r>z*enable_redis_extension..ks=..v66r-z etc/php.iniz=Marker exists: %s, adding those modules to custom awp ini: %sr)rr$get_required_modulesr%sortdisable_modulesitemsr r!r"r#enable_modulesstrcreate_custom_inir(r r)r*r+redis_required_modulesmodulesmodule_status_mapr=existing_modulesnon_loaded_moduless` r,enable_redis_extensionrMBs*"+VDDDN+@@AZ[[ ! IJJJh//G LL22L333pp W  )7)G)GHbH^*`*` g & &)7(F(FGdX^GdGdGdgmfn(o(o f % % LLE2CEEFFF/5577  LL;)9;;<<<""#:>9 : :U%%m5GHHHH T4+,, . . . (()?g)?)?ASTTT 2K4GPPPPPr-cp|rtt|gn t}d|D}|S)Nc:g|]}tj||Sr;)ris_php_supported)r<rs r,r>z%supported_alt_php..{s:"""3G3XY`3a3a""""r-)r rr )ralt_php_versionssupported_alt_php_versionss r,r&r&ysWMTp*n+Gg+G+GHHIIZnZpZp""/""" &%r-returnc>t|}t|S)zs Return list of php version supported by AccelerateWP and on which redis is presented but not enabled. )r&r)rrRs r, get_php_versions_to_enable_redisrUs! "37!;!; 45O P PPr-ctjdd}|dtd|ddd |d dd |d dd |ddd|ddd|\}}|jrt jt j|S)zB Parse arguments for enable_redis_for_alt_php.py utility. rz0Utility for enabling redis extension for alt-php)prog descriptionz --versionz3Enable redis extension for specific alt-php version)typehelpz --no-rebuild store_truez/Run without rebuilding users' alt_php.ini files)actionrZz--remove-custom-iniz%Run to remove custom acceleratewp.iniz--allz)Run to remove ALL custom acceleratewp.iniz-vz --verbose)r\z-fz--force)level) argparseArgumentParser add_argumentintparse_known_argsverboselogging basicConfigDEBUG)parseropts_s r, parse_argsrjs' $ 'FF   B   ?   4   ;fggg k,??? i ===%%''GD! |1'-0000 Kr-ct}tts*|js#t dt jdt}|jr.t|j |j t jdttj dtd5t!|j }|s.t"dt jdt't5|D]}t)|tj t,r!t/dD]}t1||st jd|js<|r(|t9t"dddn #1swxYwYddddS#1swxYwYdS)zP Enable redis extension for alt-php versions supported by AccelerateWP. z;Run only if object caching is allowed for at least one userrz/var/runN)attemptsz:All php versions have redis extension installed and active)rjrrforceprintsysexitrr'rallrr r!joinrrUr$inforrMr"r#r&r0 no_rebuildis_cagefs_presentrebuild_alt_php_inir )rhcagefsphp_versions_to_enable_redisr*s r,mainrysS <> N N N<<'G 'U'U$,  KKT U U U HQKKK ^ , , < <; 4 4 &{3333w~~=>> 1#4T#:#:11K#K00000  ? rs'&&&&& !!!!!!!!&&&&&&;;;;;;;; *)))))======<<<<<<  *}?    &4"Y"Y"Y Jx} Jx~ J J J JHHHHH 5Q5Q5Q5Q5Qn&x}&&&&QhsmQS QQQQH&D+<+<+<\ zDFFFFFr-