A. Php dosyası dahil edilmiştir yerden söyle?

4 Cevap php

Herkes bir PHP komut dosyası (bir HTML sayfası olarak) doğrudan denilen, ya da bir JavaScript gibi, ya da bir CSS Stil olarak olup olmadığını söylüyorum otomatik bir şekilde biliyor mu?

Olmadan değişkenleri GET veya (ben şu anda yapıyorum ne) dosyasında bir bayrak ayarı.

Sadece merak.

EDIT: Biraz geçmiş cevapları için istendi, çünkü: Bu istiyorum nedeni CSS dosyalarını servis atarken yanı sıra HTML sayfaları görev yaparken kullandığım bir çerçevedir. Bu Frameweork bir özel hata işleyicisi var. JS "modunda" olduğumda, ben bir JS alert () gibi hataları atmak istiyorum. Ben CSS modunda değilim, belki kırmızı bir vücut arka plan falan. Ben kod temizliğine uğruna bayrakların (? Mode = css) veya sabit tanımları ile çalışma önlemek istiyorum, ancak birkaç answerers bir kaynak için kullanılan ne olduğunu bulma hayır "sihirli" bir yol olduğunu doğruladı.

4 Cevap

Ben doğru anlamak, siz (böyle) kendisini çağıran bir sayfa var:

<?php // page.php
if (is_called_as_js()) {
    header('Content-Type: text/javascript;charset=utf-8');
    echo "alert('hello');";
    exit;
} elseif (is_called_as_css()) {
    header('Content-Type: text/css');
    echo 'body { color: green }';
    exit;
}
?>
<html>
(...)
<script src="page.php"></script>
<link rel="stylesheet" href="page.php" />

Bu durumda, hayır, anlatmak için hiçbir yolu yoktur - tarayıcı söyleyerek bir istek gönderir GET /page.php. Hiçbir niyet söz - sadece "Bana sayfasını vermek ve tarayıcı onunla ne karar verecek". (Evet, evet, var Accept ve etajer, çoğu sadece söylemek Accept: */*, "CSS gibi bana bu sayfayı ver" demek için bu özelliği kullanırken aslında modern bir tarayıcı görmedim)

Tüm çıktı, bu JS olması, CSS, HTML ya da ısrar ederseniz, bir dosya ile oluşturulan gerektiğini, I suggest an URL rewriter (Apache HTTP sunucusu varsayarak, bu mod_rewrite olurdu; çoğu platformlar, bir şekilde bu işlevsellik sunuyor veya başka bir). Mod_rewrite kullanarak Örnek:

# .htaccess
RewriteEngine On
RewriteRule ^css/(.*) /page.php?type=css&file=$1 [L]
RewriteRule ^js/(.*) /page.php?type=js&file=$1 [L]

Bu şekilde, /css/style.css page.php?type=css&file=style.css script çalıştırdığınızda, benzer için /js/foobar.js gibi görünecektir talep.

(Teknik olarak, hala sonuç HTML, JS, CSS veya olması gerekiyordu olmadığını öğrenmek için GET değişkenleri kullanıyorsanız, "ama bu kullanıcılar için görünür değil, artı bazı eski tarayıcılar 'sınırlama kurtulmak eğer sorgu dizesi, don 't önbellek veya önbellek kesik kesik ")

Yani ayırt etmek istiyorum:

<link type="text/css" rel="stylesheet"
  href="http://example.com/path/to/php-file.php" />

<script type="text/javascript"
  src="http://example.com/path/to/php-file.php"></script>

Or simply opening http://example.com/path/to/php-file.php in a browser.

how dosya denilen ayırmak için bu durumlarda ayarlanır hiçbir bayrak yok. Bu <?php print_r($_SERVER); ?> yaparak $_SERVER dizi inceleyebilir ve her durumda aynı olmalıdır.

Ben url sonuna ?mode=css veya ?mode=js ekliyoruz götürün - Eğer istediğiniz çıktı ne tür geçmek için mantıklı bir yol gibi görünüyor. Sonra kod yapabilirsiniz:

  $mode = (isset($_GET['mode']) ? $_GET['mode'] : '';
  switch ($mode):
    case 'css':
      // css
    break;
    case 'js':
      // js
    break;
    default:
      // default
  endswitch;

Hayır.

Eğer bu olsa yapmanız gereken herhangi bir neden yok gerçekten. Ya çok değişik php dosyalarını css veya js dosyaları gibi çağrıldığını olmalı ya da parametreleri almak geçmelidir. Onlar yol sizin kodu bu net yapmak gerekir düzen.

Eğer tek bir komut dosyası aracılığıyla gibi farklı dosya türlerini oluşturmak isterdim neden bana tamamen açık değil de, farklı sarmalayıcılar kullanabilirsiniz:

 <?php // js.php
 define('TYPE','javascript');
 require('page.php');
 ?>


 <?php // css.php
 define('TYPE','css');
 require('page.php');
 ?>


 <?php // page.php
 if (!defined('TYPE')) {
    ?>
    <script src="js.php"></script>
    <link rel="stylesheet" href="css.php" />
    <?php
 } else if (TYPE == 'javascript') {
    header('Content-Type: text/javascript;charset=utf-8');
    ?>
    alert('hello');
    <?php
 } else if (TYPE == 'css') {
    header('Content-Type: text/css');
    ?>
    BODY { color: red }
    <?php
 }
 ?>

Hala sonunda page.php dosyasında alıyoruz, ama şimdi ne niyet ile biliyorum.