PHP geliştirme için LaTeX gibi PATH-sistemine sahip

4 Cevap php

I ~ / Dropbox / db / benim proje geliştirmek. Ben Apache sahip tek yerdir çünkü Firefox sonucunu görmek için muktedir / var / www sürekli klasörü taşımak gerekir.

Benim filetree ~ / Dropbox / db / altındadır

.
|-- handlers
|   |-- login.php
|   |-- question.php
|   |-- question_answer.php
|   `-- register.php
|-- index.php
|-- forms
|   |-- login.php
|   |-- question.php
|   |-- question_answer.php
|   `-- register.php

Örneğin ben dosyanın ~ / Dropbox / db / formlar / login.php aşağıdaki başvuru için var:

include '../handlers/login.php';

her şey bir süre sonra kırılır beri, korkunç olan. Örneğin, ben index.php Firefox başlatmak. Bu, tüm YOLLAR index.php göreli olduğu anlamına gelir. Bu anlamsız yukarıdaki komutu sağlar.

Perhaps, the only solution to the problem is to make all PATHs absolute in all my files. I have tried to avoid this because this would force me to use SED's replacement command.

Ben benzer bir komut var istiyorum lateks adlı \graphicspath formları ve ben sadece bir dosyada verilen dosyaları bulmak için söyleyebiliriz şekilde işleyicileri için. PHP index.php başında olması gereken aşağıdaki işlevi olduğunu öğrendim. Örneğin ben, form ve işleyicileri bunu uzatmak değil çünkü Ancak, yeterli görünmüyor.

$path_parts = pathinfo('/var/www/index.php');

How can you have a LaTeX-like PATH -system for PHP?

4 Cevap

Her zaman sizin mevcut yürütme dosya şu anda ikamet etmektedir klasörüne göreli olarak içerir istiyorsanız, aşağıdakileri kullanabilirsiniz:

include(dirname(__FILE__) . '/../hello.php');

Bu kod x.php içinde ve x.php den y.php, farketmez eklerseniz Yani, y.php beri olduğu rehberindeki her zaman x.php inç olduğunu dizine göreli dahil

Ben şahsen tam olarak ne istediğinizi elde en çok çaba-daha az bir şekilde düşünüyorum. Herhangi bir özel yapılandırma veya kurulum gerekmez ve tüm yollar "göreli" dir.

PHP Documentation Gönderen

__FILE__ : tam yol ve dosya ismi. Include, dolgu yolu ve dahil dosyanın dosya içinde kullanılan döndürülür.

Approach 1

include_path sizin için ne arıyorsanız var mı? Php.ini de, ya da apache sankondan ya ayarlayabilirsiniz:

<VirtualHost *:80>
    ...
    php_value include_path ".:/usr/share/php:/usr/share/pear:/usr/local/share/php"
    ...
</VirtualHost>

Kpathsea (Τεχ kullandığı) olarak oldukça güzel, ama alabileceğiniz kadar yakın değil. Bu senin belge kök dışında dosyaları dahil tutmak kolay yapar gibi (yani doğrudan onları çalıştıran birisi hakkında endişelenmenize gerek yok), bu yaklaşımı tercih ederler.

Approach 2

Sen $_SERVER['DOCUMENT_ROOT'] kullanarak belge kök alabilirsiniz. Yani tam bir yol eklemek yazmak için kullanabilirsiniz.

İyi bir çözüm normal index.php, bir dosyadan tüm programı çalıştırmak sahip olmaktır. Bu durumda ne yapardınız size ne yapacağını eylemi anlatır, bir GET parametresi olduğunu kabul. Eğer index.php göre her zaman dosya içerebilir, böylece bu bunu yapmak istiyorum.

Örneğin:? Index.php action = login veya index.php action = kayıt.

Bu da çok normal tarama davranış korunur benzersiz URL'ler için yapar.

Bu forst biraz sıradışı görünebilir, ancak bu şekilde çalışmasına PHP programları vardır (örneğin, Drupal veya Symfony) ve çok iyi çalışıyor.

I don't know exactly what LaTeX does, however I do not know why the errors you describe are happening, or is it that you think this would happen? When you point firefox to index.php all paths in index.php will be relative to index.php however all paths in login.php will (should) be relative to login.php , even if login.php is included by index.php. Also one way of not having to do such things is to use a variable to store the base path. But that won't work well for the layout you have.

On the other hand I do have a solution to your problem of moving files around, just reconfigure apache for me the file needing edit was /etc/apache2/sites-enabled/000-default you will need to do

sudo gedit /etc/apache2/sites-enabled/000-default

and enter your password. change the paths to the full path to the Dropbox/db directory

Bu, böyle bir şey sonuna kadar adınızla, USERNAME değiştirmeniz gerekir.

<VirtualHost *:80>
    ServerAdmin webmaster@localhost

    DocumentRoot /home/USERNAME/Dropbox/db
    <Directory />
    	Options FollowSymLinks
    	AllowOverride None
    </Directory>
    <Directory /home/USERNAME/Dropbox/db/>
    	Options Indexes FollowSymLinks MultiViews
    	AllowOverride None
    	Order deny,allow
    	deny from all
    	allow from 127.0.0.1
    </Directory>

    ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
    <Directory "/usr/lib/cgi-bin">
    	AllowOverride None
    	Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
    	Order allow,deny
    	Allow from all
    </Directory>

    ErrorLog /var/log/apache2/error.log

    # Possible values include: debug, info, notice, warn, error, crit,
    # alert, emerg.
    LogLevel warn

    CustomLog /var/log/apache2/access.log combined

    Alias /doc/ "/usr/share/doc/"
    <Directory "/usr/share/doc/">
        Options Indexes MultiViews FollowSymLinks
        AllowOverride None
        Order deny,allow
        Deny from all
        Allow from 127.0.0.0/255.0.0.0 ::1/128
    </Directory>

</VirtualHost>

Sonra alışkanlık etrafında dosyaları taşımak zorunda.