Visualizzazione dei risultati da 1 a 7 su 7
  1. #1

    elemento xml da usare come require_once

    Ciao a tutti!

    vi chiedo aiuto! Stavo provando a fare il file di configurazione di un sito in xml che poi parso e salvo in un array associativo.
    Il parsing del file mi è riuscito abbastanza bene ma ora ho qualche problema ad utilizzare quanto leggo... mi spiego meglio! Il mio file di configurazione è questo (ridotto all'osso):
    codice:
    <?xml version="1.0"?>
    <configdata>
        <bootstrap>
            <path>APPLICATION_PATH . "/Bootstrap.php"</path>
            <class>Bootstrap</class>
        </bootstrap>
    </configdata>
    Dove APPLICATION_PATH è una define definita nell'index.php così: define('APPLICATION_PATH', realpath(dirname(__FILE__)) . '/application');

    Ora, quando vado a leggere il contenuto di path nel mio array asociativo mi ritorna esattamente la stringa che ho dentro, ma io la vorrei usare in un require_once

    codice:
    require_once $path;
    dove appunto $path è il contenuto di quel nodo xml messo dentro come stringa! L'errore che trovo nel log è il seguente:

    [Mon Dec 09 15:23:38 2013] [error] [client 127.0.0.1] PHP Warning: require_once(APPLICATION_PATH . "/Bootstrap.php"): failed to open stream: No such file or directory in Application.php on line 141
    [Mon Dec 09 15:23:38 2013] [error] [client 127.0.0.1] PHP Fatal error: require_once(): Failed opening required 'APPLICATION_PATH "/Bootstrap.php"' (include_path='APPLICATION_PATH "/../library":/Users/warcomeb/Projects/library:.::.') in /Users/warcomeb/Projects/library/Warcomeb/Application.php on line 141
    Mi sono perso qualcosa??

    Grazie
    Marco
    warcomeb - IL LEADER O.O.O.

  2. #2
    Ragazzi, mi sono espresso male oppure ho detto qualche cavolata??

    Help me!
    Marco
    warcomeb - IL LEADER O.O.O.

  3. #3
    probabilmente, anzi sicuramente, APPLICATION_PATH . "/Bootstrap.php" non viene evalutata dal php ma trattata come stringa. quindi in $path avrai la stringa "APPLICATION_PATH. \"/Bootstrap.php\"". potresti provare a fare

    codice:
    eval("require_once $path;");
    ma non sono soluzioni che apprezzo molto
    IP-PBX management: http://www.easypbx.it

    Old account: 2126 messages
    Oldest account: 3559 messages

  4. #4
    Quote Originariamente inviata da Santino83_02 Visualizza il messaggio
    probabilmente, anzi sicuramente, APPLICATION_PATH . "/Bootstrap.php" non viene evalutata dal php ma trattata come stringa. quindi in $path avrai la stringa "APPLICATION_PATH. \"/Bootstrap.php\"". potresti provare a fare

    codice:
    eval("require_once $path;");
    ma non sono soluzioni che apprezzo molto
    Effettivamente viene visto come una stringa! Aggiungendo l'eval il tutto funziona ma effettivamente come soluzione non piace nemmeno a me! La stessa modalità di lettura da xml e caricamento con il require_once viene usato nello zend framework tranne che nell'xml la stringa viene scritta così:
    APPLICATION_PATH "/Bootstrap.php"... non capisco veramente come possa funzionare, mi sono passato tutto il codice alla ricerca del trucchetto ma non l'ho trovato!!!
    warcomeb - IL LEADER O.O.O.

  5. #5
    Quote Originariamente inviata da warcomeb Visualizza il messaggio
    Effettivamente viene visto come una stringa! Aggiungendo l'eval il tutto funziona ma effettivamente come soluzione non piace nemmeno a me! La stessa modalità di lettura da xml e caricamento con il require_once viene usato nello zend framework tranne che nell'xml la stringa viene scritta così:
    APPLICATION_PATH "/Bootstrap.php"... non capisco veramente come possa funzionare, mi sono passato tutto il codice alla ricerca del trucchetto ma non l'ho trovato!!!
    fai prima ad usare direttamente il componente di Zend. Sicuro da qualche parte il trucco c'è ma ora come ora non saprei dove suggerirti di guardare
    IP-PBX management: http://www.easypbx.it

    Old account: 2126 messages
    Oldest account: 3559 messages

  6. #6
    come dice il manuale:

    http://framework.zend.com/manual/1.1...pters.xml.html


    $string = <<<EOT
    <?xml version="1.0"?>
    <config xmlns:zf="http://framework.zend.com/xml/zend-config-xml/1.0/">
    <production>
    <includePath>
    <zf:const zf:name="APPLICATION_PATH"/>/library</includePath>
    <db>
    <adapter value="pdo_mysql"/>
    <params>
    <host value="db.example.com"/>
    </params>
    </db>
    </production>
    <staging zf:extends="production">
    <db>
    <params>
    <host value="dev.example.com"/>
    </params>
    </db>
    </staging>
    </config>
    EOT;

    define('APPLICATION_PATH', dirname(__FILE__));
    $config = new Zend_Config_Xml($string, 'staging');

    echo $config->includePath; // Prints "/var/www/something/library"
    definiscono nell'xml l'uso di una costante, APPLICATION_PATH, che poi specifichi nel define. Quindi sicuro da qualche parte ci sarà la sostituzione della costante con il valore... cmq ripeto, puoi anche usare lo Zend_Config da solo
    IP-PBX management: http://www.easypbx.it

    Old account: 2126 messages
    Oldest account: 3559 messages

  7. #7
    Moderatore di Javascript L'avatar di ciro78
    Registrato dal
    Sep 2000
    residenza
    Napoli
    Messaggi
    8,514
    secondo me fanno un banale replace di APPLICATION_PATH prima di fare il require.
    Io del resto faccio così
    Ciro Marotta - Programmatore JAVA - PHP
    Preferisco un fallimento alle mie condizioni che un successo alle condizioni altrui.


Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.