Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Общие вопросы > помогите доделать скрипт


Автор: web_VIP 8.2.2008, 16:03
Для начала вот мои скрипт:

файл - check_db.php
Код
<?php
//Убираем вывод ошибок на экране
error_reporting(0);

//Файл с данными
$file="db.txt";

//Проверяем наличие файла
if (!file_exists("$file")) { echo "файла нет<br>"; };

//Открытие файла
$file_op=fopen($file,"r+");

//Проверяем открытие файла
if (!$file_op) { echo "файл не открывается"; };

//Чтение из файла
$file_st=fgets($file_op);

//Помещаем все данные в массив
$file_db=explode("|", $file_st);

//Подключение к БД
$connect_db=mysql_connect("$file_db[0]","$file_db[1]","$file_db[2]");

//Проверяем подключение к БД
if (!$connect_db) { echo "К бд не подключился"; };

//Проверка БД
$connect_bd=mysql_select_db("$file_db[3]");

//Проверяем созданную БД
if (!$connect_bd) { echo "База данных <b>$file_db[3]</b> не создана!!!"; };

//Устанавливаем кодировку БД
mysql_query("SET NAMES CP1251");
?>


файл - db.txt
Код

localhost|root|12345|name


Два этих файла находяться в:
- http://localhost/libraries/db.txt
- http://localhost/libraries/check_db.php

файл - index.php пусть его: http://localhost/index.php 
Код

<?php
    include ("libraries/check_db.php");
?>


В результате выводиться ошибка что он не может найти "db.txt" в этой директорий, суть ошибки я понял, это нужно изменить в $file="db.txt"; => то есть указать путь => $file="libraries/db.txt";

Но вопрос в другом, если изменить, то файл будет виден только для этой директорий, а если я захочу его подлючить в других директориях (http://localhost/main/, http://localhost/lib/ и т.д.) Может подскажите что можно сделать в этом случае, может как то установить директорию или что то еще, я просто запутался.





Автор: Vaulter 8.2.2008, 16:17
Код

$file=dirname(__FILE__)."db.txt";

попробуй так

Автор: web_VIP 8.2.2008, 16:19
Цитата(Vaulter @ 8.2.2008,  16:17)
Код

$file=dirname(__FILE__)."db.txt";

попробуй так

А что это значит? можешь пояснить

Добавлено через 4 минуты и 49 секунд
Цитата(Vaulter @ 8.2.2008,  16:17)
Код

$file=dirname(__FILE__)."db.txt";

попробуй так

Пробую изменить $file="1.txt" => $file=dirname(__FILE__)."1.txt"

Ошибка!!!

Автор: drpain 8.2.2008, 16:27
я бы попробывал так

Код

$file = $_SERVER["DOCUMENT_ROOT"]."/libreris/db.txt"


или если точно знаешь что надо на уровень выше

Код

$file = getcwd()."/../libreris/db.txt"



Автор: web_VIP 8.2.2008, 16:37
Все работает!!! Спосибо!!!

Автор: web_VIP 8.2.2008, 16:53
Вариант: 
Код

$file = dirname(__FILE__)."\1.txt";
 
Тоже работает!!!

Автор: Golda 8.2.2008, 16:55
Цитата(web_VIP @  8.2.2008,  16:19 Найти цитируемый пост)
Код

$file=dirname(__FILE__)."db.txt";

попробуй так

А что это значит? можешь пояснить


Смысл предложений Vaulter и drpain в том, чтобы составить абсолютный путь к файлу. dirname() вернет путь в файловой системе к директории, в которой расположен Ваш скрипт. Должен заработать, если добавить слеш.

Код

$file=dirname(__FILE__)."./db.txt";


В принципе любой из предложеных вариантов должен заработать, но есть ньюансы. 

Вараианты  $file=dirname(__FILE__)."./db.txt"; и $file = getcwd()."/../libraries/db.txt";  опираются на знание относительного положения файла относительно скрипта. Если Вам придется не подключать файл с определением пути файла, а определять в другом скрипте, из другой директории, путь придтся формировать по-другому.

Вариант $file = $_SERVER["DOCUMENT_ROOT"]."/libraris/db.txt";  в этом смысле более общий. Так можно определить путь к файлу, не заботясь о распоположении скрипта. Но он опирается на предположение, что Ваш проект обязательно расположен в корне сайта. Если переместить проект как целое в поддиректорию, работать перестанет.

С getcwd() связан еще один ньюанс. Если dirname() возвращает директорию, в которой расположен данный скрипт, то getcwd() возвращает текущую рабочую директорию. И тут надо быть осторожным. Если Ваш скрипт подключается другим, из другой директории, Вас ждет сюрприз.  getcwd() вернет директорию, в который расположен скрипт, вызванный пользователем, а не подключенный. А если вызов происходит из командной строки, текущая директория - это вообще директория, в которой находится пользователь, когда этот скрипт вызывает. Текущая директория - очень непредсказуемая штука. Я бы не использовала этот вариант

Автор: web_VIP 8.2.2008, 17:04
Golda  Ну и что же лучше выбрать?

Автор: Golda 8.2.2008, 17:16
Вам лучше знать особенности своего проекта. Я объяснила ньюансы, а дальше решайте. В текущей постановке задаче. Если точно известно, проект не будет перемещаться в поддиректорию и скрипт всегда будет вызываться через веб-сервер, а не из командной строки, я бы выбрала вариант с $_SERVER["DOCUMENT_ROOT"]. Заодно не тратится время на вызов дополнительных функций

Автор: web_VIP 9.2.2008, 09:22
Golda  А мне если чесно понравилась вот эта идея - $file=dirname(__FILE__)."./db.txt"; так как при смене директорий скрипт все равно будет работать, ну других пока минусом не нашел в нем. а $_SERVER["DOCUMENT_ROOT"] показывает путь до корневой директорий сайта как я понял.

Автор: Staind 9.2.2008, 09:39
Цитата

а $_SERVER["DOCUMENT_ROOT"] показывает путь до корневой директорий сайта как я понял

Да. Верно.
P.s. Удобная переменная, имхо.

Автор: Golda 9.2.2008, 14:49
Цитата(web_VIP @  9.2.2008,  09:22 Найти цитируемый пост)
Golda  А мне если чесно понравилась вот эта идея - $file=dirname(__FILE__)."./db.txt";


Вполне нормальный вариант. Только, sorry, заметила у себя описку. Точка лишняя. Я имела в виду

Код

$file=dirname(__FILE__)."/db.txt";

Автор: flashaa 9.2.2008, 14:59
Цитата(drpain @ 8.2.2008,  16:27)
я бы попробывал так

Код

$file = $_SERVER["DOCUMENT_ROOT"]."/libreris/db.txt"


или если точно знаешь что надо на уровень выше

Код

$file = getcwd()."/../libreris/db.txt"

Не очень хорошие решения. Первое соответственно работает только если скрипт лежит "в корне сайта", что нехорошо, т.к. я переложу во вложенную папку  или перемещусь на другой хостинг и все перестанет работать.
getcwd() - решение тоже не надежное, т.к. этот параметр может повести себя непредсказуемо. В php-apache он равен директории запрошенного скрипта. А если мы захотим запросить не этот скрипт а другой, а данный захотим подключить через require или include все сломается. В php-cli скрипт вообще не меняет рабочую директорию. В php-cgi по-моему тоже не меняет (но не утверждаю, т.к. не уверен). 
Так что самый хороший вариант dirname(__FILE__)

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)