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:

  1. propietario podría ser diferente (no result.php ser creada por nobody usuario?)
  2. Los permisos son originalmente diferente. FTP'd archivo (de trabajo) es 0775, mientras que los creados usando fwrite () (no incluyen el trabajo) tenían 664, y se chmod por el generator.php a 0775.
  3. Trabajar archivo test.php fue editado en un Mac con Smultron y subido a través de FTP, mientras que result.php fue creado por fwrite() en generator.php en Linux, llamada desde un navegador.
¿Fue útil?

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

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top