PHP4 problemas con include () dentro de un archivo creado por fwrite ()
-
21-09-2019 - |
Pregunta
Tengo un archivo llamado generator.php
que utiliza fwrite()
para crear un result.php
en el servidor (Apache, PHP 4).
Una de las líneas en result.php
es una declaración PHP include()
.
Por lo tanto, en generator.php
:
if (!is_file($fname)){
$resultfile = fopen($current_path . "/" . $fname, "w+");
}
fwrite($resultfile, '<?php include($_SERVER["DOCUMENT_ROOT"] . "'. '/inc/footer.php"); ?>' . "\n");
fclose($resultfile);
chmod($current_path . "/" . $fname, 0755);
Y en result.php
:
<h2>Sponsored Links</h2>
<!-- begin sidebar_top ad -->
<?php echo $_SERVER['DOCUMENT_ROOT'] . "/ads/sidebar_top.php" . "<hr />";
include($_SERVER['DOCUMENT_ROOT'] . "/ads/sidebar_top.php"); ?>
<!-- end sidebar_top ad -->
Pero esa declaración include()
no funciona cuando vuelva a result.php
en un navegador. La declaración de eco hace, así que sé que la ruta es correcta.
Otra test.php
con el mismo código, que he subido a través de FTP en la misma carpeta, trabaja muy bien.
El código de la misma en ambos archivos, cuando se recuperan a través de FTP.
En test.php
: (. Ecos obras, e incluye correctamente)
<?php
echo $_SERVER['DOCUMENT_ROOT'] . "/ads/sidebar_top.php" . "<hr />";
include($_SERVER['DOCUMENT_ROOT'] . "/ads/sidebar_top.php");
?>
¿Alguna idea de por qué el include()
está trabajando en test.php
(creado manualmente) y no en result.php
(creado usando fwrite()
), cuando ambos están en la misma carpeta?
Las únicas diferencias que conozco de entre los archivos:
- propietario podría ser diferente (no
result.php
ser creada pornobody
usuario?) - Los permisos son originalmente diferente. FTP'd archivo (de trabajo) es
0775
, mientras que los creados usando fwrite () (no incluyen el trabajo) tenían664
, y se chmod por elgenerator.php
a0775
. - Trabajar archivo
test.php
fue editado en un Mac con Smultron y subido a través de FTP, mientras queresult.php
fue creado porfwrite()
engenerator.php
en Linux, llamada desde un navegador.
Solución 2
Cuando el modo seguro PHP 4 está activado, el result.php
, siendo escrito por otro UID, no puede no tener acceso al archivo incluido, que pertenece a otro fluido.
Restricción de modo seguro en vigor. El guión cuyo UID es 48 no se le permite el acceso /var/www/vhosts/example.com/httpdocs/ads/sidebar_top.php propiedad de UID 10010 en /var/www/vhosts/example.com/httpdocs/results/result.php en la línea 130
resolví esto abriendo php.ini
y cambiando a safe_mode_gid = On
, y la adición de mi incluye directorio para safe_mode_include_dir
.
También tuve que reiniciar Apache para que los cambios tengan efecto.
Otros consejos
fwrite($resultfile, '<?php include($_SERVER["DOCUMENT_ROOT"] . "/inc/footer.php"); ?>' . "\n");
que había un extra "de allí, creo