Estoy ejecutando un sitio PHP en Windows usando Wampserver. En todo el sitio hay una línea codificada como:

$settings = parse_ini_file("/usr/local/apache2/myconfigs/settings.ini", true);

Sé que para empezar es una mala práctica, pero está fuera de mi control.

Cuando se ejecuta el sitio, ¿hay alguna forma posible de engañar al sitio para que señale a C:\wamp64\bin\apache\apache2.4.27\myconfigs\settings.ini siempre que el código busque /usr/local/apache2/myconfigs/settings.ini en la función parse_ini_file?

5
Blake Rivell 27 feb. 2018 a las 18:17

5 respuestas

La mejor respuesta

Esto es un poco hack pero creo que es lo que estás buscando, así que el truco aquí es redefinir la función parse_ini_file y hacer que ignore la ruta pasada no válida ("/usr/local/apache2/myconfigs/settings.ini") y usar el archivo correcto en su lugar .

Esto parece sencillo pero un poco complicado ya que su nueva función también debería llamar a la función original parse_ini_file de alguna manera, es por eso que debe cambiarle el nombre primero y luego anularla

Necesitará la extensión PHP runkit habilitada para esto, eche un vistazo a runkit_function_redefine y runkit_function_rename para referencia.

No probado pero debería funcionar, el código debería ser algo alrededor de estas líneas:

runkit_function_rename('parse_ini_file','original_parse_ini_file');
runkit_function_redefine('parse_ini_file', function() {
    original_parse_ini_file("C:\wamp64\bin\apache\apache2.4.27\myconfigs\settings.ini", true);
});

Asegúrese de que el código anterior se ejecute al comienzo de la secuencia de comandos de la aplicación y cualquier llamada parse_ini_file debe usar su archivo en lugar del codificado.

Si no hay un único punto de entrada a su aplicación donde pueda poner el código anterior, puede ponerlo en un script separado y hacer que PHP se cargue antes de ejecutar cualquier script a través de la configuración auto_prepend_file en su archivo settings.ini , también asegúrese de que runkit.internal_override esté configurado en On ya que parse_ini_file no es una función definida por el usuario.

1
mrbm 21 mar. 2018 a las 18:12
$settings = parse_ini_file(APACHE_INI_PATH, true);
// $settings = parse_ini_file("/usr/local/apache2/myconfigs/settings.ini", true);
3
cddoma 19 mar. 2018 a las 14:21

Si no desea buscar y reemplazar según lo sugerido por @cddoma, le propongo que cree el directorio / usr / local / apache2 / myconfigs / en su máquina de Windows y copie el archivo settings.ini de C: \ wamp64 \ bin \ apache \ apache2.4.27 \ myconfigs \ settings.ini a ese directorio.

Abra la línea de comando de Windows e ingrese lo siguiente

mkdir C:\usr\local\apache2\myconfigs\

copy C:\wamp64\bin\apache\apache2.4.27\myconfigs\settings.ini C:\usr\local\apache2\myconfigs\

0
Solomon A. 21 mar. 2018 a las 15:34

Puede hacerlo con un Enlace simbólico en Windows

0
zakaria35 23 mar. 2018 a las 01:23

Hola por favor revisa esto

runkit_function_rename('parse_ini_file','o_parse_ini_file');
runkit_function_redefine('parse_ini_file', function($p1,$p2)  use($someCondition) {
    if($someCondition)
        o_parse_ini_file("C:\wamp64\bin\apache\apache2.4.27\myconfigs\settings.ini", true);
    else
        o_parse_ini_file($p1,$p2);

});

Puede volver

Llamada a la función indefinida runkit_function_rename ()

Para corregir este error lea aquí

o aquí

1
Nigel Ren 24 mar. 2018 a las 07:46