проблем с define

bunchevi

Registered
Понеже започнах да правя интернет магазин преди няколко месеца, но го бях оставила и сега има нещо което не мога да разбера защо съм направила. Свързано е с define, който използвам по следния начин:
в header.php започвам кода ето така:
<?php if ( !defined('IN_VALID') ) { die('<Center><B>Грешка: Нямате директен достъп до този файл</B><BR>За да се върнете назад натиснете <a href="#">тук</a></Center>'); }
?>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

а в логин и регистър навсякъде съм дефинирала въпросната променлива като true, с изключение в config.php

Когато заредя index.php в localhost ми изписва съобщението в die. Докато преди да прекъсна работата си по сайта нямах такива проблеми и затова ми е много странно.

Много се надявам да ми помогнете за този проблем, защото явно съм го добавила с цел някаква сигурност.
 
Значи, винаги над това
Код:
<?php if ( !defined('IN_VALID') ) { die('<Center><B>Грешка: Нямате директен достъп до този файл</B><BR>За да се върнете назад натиснете <a href="#">тук</a></Center>'); }
?>

където искаш да е нормално, трябва да сложиш define("IN_VALID", true);
 
Ако не се лъжа, това се прави с цел да не се зарежда дадена страница директно от браузъра, а само чрез include в PHP. За целта в инклудващия файл се поставя define( 'IN_VALID', true ); за да работи както трябва.
Аз правя същото но с променливи :)
 
ами на мен това като ми е в header.php, в който всъщност нямам никакво php, следователно нямам и include, има ли смисъл да го пиша, или трябва да го напиша в индекс.пхп преди require_once('header.php'); , а в хедъра да го дефинирам само.

Дано не звучи объркващо обяснението ми и ви благодаря за бързите и ясни отговори!
 
Смисъл не виждам в момента, защото в тази страница имаш само някакъв html :) Принципно се прилага за страници от сайта, играещи малко по-важна роял и до които не искаш хората да могат да се докопат :)
Така че предлагам ти да махнеш това if(!defined(.... :)
 
а не се ли използва например да не се зареждат направо именно тези страници с логин, регистър и т.н. Ако може някой да ми даде някакъв елементарен пример с употребата му. Явно не мога да схвана толкова бързо и добре нещата за което се извинявам.
 
Ето прост пример:

index.php
Код:
<?php
define( 'IN_VALID', true );

if( нещо... ){
    include 'supersecret.php';
}
....

supersecret.php
Код:
<?php
if( !defined( 'IN_VALID' ) )
exit( 'Нямаш достъп до тази страница!' );

// суперсекретен код!

Ако заредиш страницата index.php и упешно преминеш проверката и include-неш страницата supersecret.php, кода в нея ще се изпълни. Но ако отовриш supersecret директно от браузъра, скрипта ще ти каже че нямаш достъп :)
Това е смисъла на този код. Върши работа, но аз предпочитам да си слагам такива файлове във една директория и с .htaccess да блокирам http access-а :)
 
Сега вече ми стана напълно ясно. Даже и аз ще разуча този вариант който ти ползваш, че ми изглежда по- прегледно. Благодаря ти!
 

Back
Горе