Foros del Web » Programando para Internet » PHP »

dirname(__FILE__) en Windows, problemas con la ruta

Estas en el tema de dirname(__FILE__) en Windows, problemas con la ruta en el foro de PHP en Foros del Web. Buenas, Estoy intentando seguir el tutorial "Jobeet" de symfony en su version 1.4 y con el ORM Doctrine, antes lo hacía en Linux pero decidí ...
  #1 (permalink)  
Antiguo 29/07/2010, 08:53
 
Fecha de Ingreso: mayo-2009
Mensajes: 41
Antigüedad: 15 años, 6 meses
Puntos: 1
dirname(__FILE__) en Windows, problemas con la ruta

Buenas,
Estoy intentando seguir el tutorial "Jobeet" de symfony en su version 1.4 y con el ORM Doctrine, antes lo hacía en Linux pero decidí migrar todo a un LAMP (WAMP) y Windows 7, y me estoy encontrando con bastantes problemas...
en sí, el error que me sale es este:

Código HTML:
Ver original
  1. Warning: require_once(D:\Proyectos\PHP\jobeet\config/../lib/autoload/sfCoreAutoload.class.php) [function.require-once]: failed to open stream: No such file or directory in D:\Proyectos\PHP\jobeet\config\ProjectConfiguration.class.php on line 5
  2.  
  3. Fatal error: require_once() [function.require]: Failed opening required 'D:\Proyectos\PHP\jobeet\config/../lib/autoload/sfCoreAutoload.class.php' (include_path='.;c:\php\includes;D:\symfony.1.4\symfony') in D:\Proyectos\PHP\jobeet\config\ProjectConfiguration.class.php on line 5

en ProjectConfiguration.class.php tengo:
Código PHP:
Ver original
  1. <?php
  2.  
  3. //require_once substr(dirname(__FILE__), 0,-6).'lib/autoload/sfCoreAutoload.class.php';
  4. //require_once substr(str_ireplace("\\", "/",dirname(__FILE__)),0,-6).'lib/autoload/sfCoreAutoload.class.php';
  5. require_once dirname(__FILE__).'/../lib/autoload/sfCoreAutoload.class.php';
  6. sfCoreAutoload::register();
  7.  
  8. class ProjectConfiguration extends sfProjectConfiguration
  9. {
  10.   public function setup()
  11.   {
  12.     $this->enablePlugins('sfDoctrinePlugin');
  13.   }
  14. }

en index.php tengo:
Código PHP:
Ver original
  1. <?php
  2. //require_once(substr(dirname(__FILE__), 0,-6).'config/ProjectConfiguration.class.php');
  3. require_once(dirname(__FILE__).'/../config/ProjectConfiguration.class.php');
  4. $configuration = ProjectConfiguration::getApplicationConfiguration('frontend', 'prod', false);
  5. sfContext::createInstance($configuration)->dispatch();

y en el ".htaccess" esto:
Código Apache:
Ver original
  1. <VirtualHost 127.0.0.1:80>
  2.   ServerName jobeet.localhost
  3.   DocumentRoot "D:/Proyectos/PHP/jobeet/web/"
  4.   DirectoryIndex index.php
  5.   <Directory "D:/Proyectos/PHP/jobeet/web/">
  6.     AllowOverride All
  7.     Allow from All
  8.   </Directory>
  9.  
  10.   Alias /sf "D:/Proyectos/PHP/jobeet/lib/vendor/symfony/data/web/sf/"
  11.   <Directory "D:/Proyectos/PHP/jobeet/lib/vendor/symfony/data/web/sf/">
  12.     AllowOverride All
  13.     Allow from All
  14.   </Directory>
  15. </VirtualHost>

Tengo en hosts la linea de 127.0.0.1 jobeet.localhost,

como se ve en los comentarios de las paginas he intentado varias combinaciones para que la ruta no tenga cosas "raras" para windows, pero ninguna de las combinaciones me ha funcionado...
Alguna idea?
  #2 (permalink)  
Antiguo 29/07/2010, 08:58
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 15 años, 5 meses
Puntos: 1517
Respuesta: dirname(__FILE__) en Windows, problemas con la ruta

Trata usando $_SERVER['DOCUMENT_ROOT']. Te va a llevar al directorio principal de donde almacenas las páginas web y desde ahí puedes hacer la ruta.
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #3 (permalink)  
Antiguo 29/07/2010, 12:00
 
Fecha de Ingreso: mayo-2009
Mensajes: 41
Antigüedad: 15 años, 6 meses
Puntos: 1
Respuesta: dirname(__FILE__) en Windows, problemas con la ruta

La cosa ha quedado así:
el index.php
Código PHP:
Ver original
  1. <?php
  2. //require_once(substr(dirname(__FILE__), 0,-4).'config/ProjectConfiguration.class.php');
  3. //require_once(dirname(__FILE__).'/../config/ProjectConfiguration.class.php');
  4. require_once substr($_SERVER['DOCUMENT_ROOT'],0,-4).'config/ProjectConfiguration.class.php';
  5. $configuration = ProjectConfiguration::getApplicationConfiguration('frontend', 'prod', false);
  6. sfContext::createInstance($configuration)->dispatch();

ProjectConfiguration.class.php:
Código PHP:
Ver original
  1. <?php
  2.  
  3. //require_once substr(dirname(__FILE__), 0,-6).'lib/autoload/sfCoreAutoload.class.php';
  4. //require_once substr(str_ireplace("\\", "/",dirname(__FILE__)),0,-6).'lib/autoload/sfCoreAutoload.class.php';
  5. //require_once dirname(__FILE__).'/../lib/autoload/sfCoreAutoload.class.php';
  6. require_once substr($_SERVER['DOCUMENT_ROOT'],0,-4).'lib/autoload/sfCoreAutoload.class.php';
  7. sfCoreAutoload::register();
  8.  
  9. class ProjectConfiguration extends sfProjectConfiguration
  10. {
  11.   public function setup()
  12.   {
  13.     $this->enablePlugins('sfDoctrinePlugin');
  14.   }
  15. }

El error:
Código HTML:
Ver original
  1. Warning: require_once(D:/Proyectos/PHP/jobeet/lib/autoload/sfCoreAutoload.class.php) [function.require-once]: failed to open stream: No such file or directory in D:\Proyectos\PHP\jobeet\config\ProjectConfiguration.class.php on line 6
  2.  
  3. Fatal error: require_once() [function.require]: Failed opening required 'D:/Proyectos/PHP/jobeet/lib/autoload/sfCoreAutoload.class.php' (include_path='.;c:\php\includes;D:\symfony.1.4\symfony') in D:\Proyectos\PHP\jobeet\config\ProjectConfiguration.class.php on line 6

No me funciona aún asi, debo estar haciendo algo fatal de base, porque no me creo que todo el mundo tenga estos problemas (o es que todo el mundo copia toda la carpeta del proyecto dentro de "www"

Mi estructura está así:
WAMP:
c:\Wamp
localhost:
c:\Wamp\www

Proyecto en symfony:
D:\Proyectos\PHP\jobeet

symfony dentro del proyecto:
D:\Proyectos\PHP\jobeet\lib\vendor\symfony

".htaccess" (entre comillas ya que es un "alias" como lo entiende wamp por lo que parece (en c:\Wamp\alias\jobeet.conf)

Código Apache:
Ver original
  1. <VirtualHost 127.0.0.1:80>
  2.   ServerName jobeet.localhost
  3.   DocumentRoot "D:/Proyectos/PHP/jobeet/web/"
  4.   DirectoryIndex index.php
  5.   <Directory "D:/Proyectos/PHP/jobeet/web/">
  6.     AllowOverride All
  7.     Allow from All
  8.   </Directory>
  9.  
  10.   Alias /sf "D:/Proyectos/PHP/jobeet/lib/vendor/symfony/data/web/sf/"
  11.   <Directory "D:/Proyectos/PHP/jobeet/lib/vendor/symfony/data/web/sf/">
  12.     AllowOverride All
  13.     Allow from All
  14.   </Directory>
  15. </VirtualHost>

Quizá una solución sea, en el htaccess crear un alias llamado "web" y que lleve a la ruta d:\Proyectos\PHP\jobeet\web ?
es lo siguiente que queria hacer, pero no queria salirme del guión del tutorial de symfony...
  #4 (permalink)  
Antiguo 29/07/2010, 15:43
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 16 años, 3 meses
Puntos: 2237
Respuesta: dirname(__FILE__) en Windows, problemas con la ruta

Lo mas facil es crear un archivo config.php donde detectes el directorio y crear una constante:

config.php
Código PHP:
Ver original
  1. <?php
  2. // Obtienes la ruta:
  3. $ruta = dirname(__FILE__);
  4.  
  5. // Eliminas la letra de la unidad en sistemas win:
  6. if($ruta[1] == ':')
  7.     $ruta = substr($ruta, 2);
  8.  
  9. // Cambias las diagonales invertidas por normales:
  10. $ruta = str_replace('\\', '/', $ruta);
  11.  
  12. // Defines una constante:
  13. define('ROOT', $ruta);

Si tienes bien definida la estructura de tus carpetas, no tendras problemas para incluir siempre config.php antes de hacer cualquier otra cosa:

Código PHP:
Ver original
  1. include '../config.php';
  2.  
  3. // Despues puedes incluir otros archivos:
  4. include ROOT . '/otra/carpeta/archivo.php';

De paso puedes dar otros usos a config.php como info de conexion a base de datos y alguna otra cosa que necesites en todos tus scripts.
__________________
- León, Guanajuato
- GV-Foto
  #5 (permalink)  
Antiguo 29/07/2010, 15:52
 
Fecha de Ingreso: mayo-2009
Mensajes: 41
Antigüedad: 15 años, 6 meses
Puntos: 1
Respuesta: dirname(__FILE__) en Windows, problemas con la ruta

Os lo agradezco :P, ya conseguí arreglarlo... y como no, un fallo de base gordísimo.
En la linea:
#
require_once substr($_SERVER['DOCUMENT_ROOT'],0,-4).'lib/autoload/sfCoreAutoload.class.php';

falta lib/vendor/ y luevo va lib/autoload... etc, y ya está..... manda huevos ;)

pero lo que está claro, es que creo que usaré lo que me has recomendado, Triby, para no tener que andar buscando siempre el directorio donde anda symfony.
Habia hasta eliminado wamp para instalar xampp, y casi había sido peor

Etiquetas: ruta, windows
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 21:11.