[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: php windows ХР - linux
Гость_Михаил
Проблема вот в чём. Поднял дома Апачи 2.0.55 из под windows ХР. Сделал сайт с базой сохраняемой в *.txt и *.bat , поместил в сеть, а там сервак на Linux и мой сайт не может даже открыть файл sad.gif . В чём ошибка? Код такой:
<?php
@$s=fopen("BD/Schetchik.bat","a+","t") or die('Ошибка открытия!');
flock($s,2);
$stat=stat("BD/Schetchik.bat");
@$sch=fread($s,$stat[7]);
ftruncate($s,0);
$sch=$sch+1;
fwrite($s, $sch) or die('Ошибка записи!');
fflush($s);
flock($s,3);
fclose($s) or die('Ошибка закрытия!');
echo $sch." посещений";
?>




Спустя 22 минуты, 31 секунда (9.04.2009 - 12:06) Kuliev написал(а):
Гость_Михаил
Попробуйте переименовать ваш файлик Schetchik.bat в Schetchik.inc или
Schetchik.dat проверьте право доступа на запись в файл!

Спустя 59 минут, 16 секунд (9.04.2009 - 13:06) sergeiss написал(а):
Цитата (Гость_Михаил @ 9.04.2009 - 11:44)
Сделал сайт с базой сохраняемой в *.txt и *.bat , поместил в сеть, а там сервак на Linux и мой сайт не может даже открыть файл sad.gif . В чём ошибка?

Ошибка в первую очередь в том, что используешь простые файлы как базу данных.
Используй MySQL или PostgreSQL, и будет тебе счастье! Ибо нефиг изобретать велосипед.

Спустя 4 часа, 18 минут, 34 секунды (9.04.2009 - 17:24) Viking написал(а):
1 в начало файла
ini_set('display_errors', 1);
error_reporting(E_ALL);
2 убрать всех собак (@)
3 прочитать ошибку

Спустя 16 часов, 4 минуты, 33 секунды (10.04.2009 - 09:29) Гость_Михаил написал(а):
Всем большое спасибо за советы попробую.
По совету о доступе: это первое про что я подумал, к папке в которой создаются или изменяются файлы данных, открыт полный доступ. PHP я до конца не освоил, и в данный момент продолжаю его изучать
По совету о велосипеде: Я ещё не знаю MySQL, по тому и сделал в такой форме.
По совету о настройках: у меня дома включены все ошибки и всё работает как нужно, а собаки отключают ошибку в случае пустого файла, когда счётчик обнулён или файл создаётся в первые (в данный момент файл существует и не пуст). Код ошибки 404.

Спустя 2 часа, 1 минута, 24 секунды (10.04.2009 - 11:30) RealMan написал(а):
дак ошибки то надо смотреть не дома а на сервере какие вылазят smile.gif

а по скрипту, странно выглядит строка
@$s=fopen("BD/Schetchik.bat","a+","t") or die('Ошибка открытия!');
может быть имелось ввиду
@$s=fopen("BD/Schetchik.bat","a+t") or die('Ошибка открытия!');

Спустя 17 минут, 21 секунда (10.04.2009 - 11:47) alexander-travkin написал(а):
@ - признак дурного тона.

Спустя 4 минуты, 19 секунд (10.04.2009 - 11:52) sergeiss написал(а):
Цитата (alexander-travkin @ 10.04.2009 - 11:47)
@ - признак дурного тона.

Да ну? smile.gif С каких-таких пор?

Только это знак должен быть справа от равенства, например

PHP
$s=@fopen(.... )


Спустя 2 часа, 49 минут, 9 секунд (10.04.2009 - 14:41) Гость_Михаил написал(а):
Кому интересно может посмотреть сам сайтик, он расположен на бесплатном хосте, с поддержкой дофига чего, на серваке ОС Linux. http://1001obyavlenie.comoj.com
К папкам открыт доступ на чтение и запись. Но в виду непонять чего, сайт полуфункциональный. Под XP при всех включеных ошибках работает нормально, а в сети даже фрейм работает на 50%. Сохранение проходит в фо все файлы по типу вышеуказаного скрипта.
Заранее всем огромное спасибо.

Спустя 7 часов, 22 минуты, 37 секунд (10.04.2009 - 22:04) kirik написал(а):
Цитата (sergeiss @ 10.04.2009 - 03:52)
Да ну? smile.gif С каких-таких пор?

Это усложняет отладку программы, это тормозит работу программы, это собака smile.gif
Правильно, зачем писать грамотный код без нотисов / ворнингов, когда можно эти все ошибки слить куда подальше. Зачем писать $id = isset($_GET['id']) ? $_GET['id'] : null;, когда можно написать $id = @$_GET['id']; и радоваться жизни. А может вообще вывод ошибок отрубить?


Спустя 1 час, 10 минут, 23 секунды (10.04.2009 - 23:14) sergeiss написал(а):
kirik - ты хочешь сказать, что @ никогда не надо использовать?

Если да, то позволь не согласиться!!! Потому что - зачем нужен показ ошибок в браузере, если я могу спокойно отловить эти ошибки и выполнить какие-то действия по коррекции?
К тому же, при появлении неожидаемого сообщения в нештатном месте скрипта можно нежданно-негаданно наступить на грабли вида "Cannot modify header..."

Спустя 18 минут, 35 секунд (10.04.2009 - 23:33) kirik написал(а):
sergeiss, обычно для того чтобы ошибка не показывалась юзеру, делается подмена стандартного вывода ошибок своим (через функцию set_error_handler()). А там все ошибки ты можешь писать в лог (не показывая их юзеру), и по мере надобности / желанию фиксить. Во всех разработках по-хорошему нужно ставить error_reporting(E_ALL | E_STRICT);, не использовать ни каких собак, и писать нотисы в лог. Только так можно создать стабильное приложение. И на багфиксинг тратиться не особо можно smile.gif Юзеры сами покажут где в скрипте тонкие места smile.gif

Спустя 15 минут, 4 секунды (10.04.2009 - 23:48) vasa_c написал(а):
неправильно

Код

$fp = @fopen($filename, 'r');
/* Йа в домике, прога может накрыться, но я не вижу сообщений и мне хорошо. */


правильно

Код

$fp = @fopen($filename, 'r');
if (!$fp) {
   throw new Exception('нах, нах...');
}
/*
Я корректно обработал ошибочную ситуацию,
мне не нужны здесь эти идиотские нотисы, ни на экране, ни в логе.
*/

Спустя 8 минут, 47 секунд (10.04.2009 - 23:56) kirik написал(а):
Что с исключениями что без, собаки - зло smile.gif

Спустя 12 минут, 38 секунд (11.04.2009 - 00:09) sergeiss написал(а):
vasa_c - да, примерно это я и имел ввиду smile.gif. Так и делаю. И не обязательно с исключениями, обычно через простую проверку результата. И мне тоже не хочется копаться в каких-то логах для поиска ошибок.

kirik - вот у меня в одном месте юзер вводит много параметров. Корректность части из них проверяется JavaScript, часть в ПХП. Но там столько возможных комбинаций параметров... Что все их контролировать просто сложно smile.gif Я проверяю только самые основные, самые частые ошибки.
Потом формируется запрос к БД... И вот тут как раз я проверяю запрос на ошибку.
Если есть ошибка - даю запрос юзеру на коррекцию параметров. Сам пусть думает, что у него "не так".
Вопрос: нафига юзер будет видет имена таблиц и мой запрос у себя в браузере? Это не нужно ни ему, ни мне.



Спустя 8 минут, 33 секунды (11.04.2009 - 00:18) kirik написал(а):
Цитата (sergeiss @ 10.04.2009 - 16:09)
И вот тут как раз я проверяю запрос на ошибку.

На ошибку самого запроса?

зы. sergeiss, что-то нехорошее замышляет мужичок у тебя на аватарке smile.gif

Спустя 7 минут, 27 секунд (11.04.2009 - 00:25) sergeiss написал(а):
Цитата (kirik @ 11.04.2009 - 00:18)
Цитата (sergeiss @ 10.04.2009 - 16:09)
И вот тут как раз я проверяю запрос на ошибку.

На ошибку самого запроса?

зы. sergeiss, что-то нехорошее замышляет мужичок у тебя на аватарке smile.gif

Да.

Типа
PHP
$query=@pg_query( $sql );
if(
 !$query )  .....

Это позволяет даже при возникновении ошибки спокойно вызвать header(...) для перехода, либо записать информацию об ошибке в символьную строку и/или выполнить какие-то действия.

PS. А мужикок в аватарке просто устал от работы, отдыхает smile.gif Он сначала несколько дней смеялся, а потом решил отдохнуть. Топориками махать - это не по клаве стучать smile.gif

PPS. И самое главное - такого рода защита дает мне меньше головной боли при разработке скрипта, т.к. я сразу же могу защититься от различных проблем, отработать ошибочные состояния.

Спустя 2 минуты, 36 секунд (11.04.2009 - 00:28) kirik написал(а):
Цитата (sergeiss @ 10.04.2009 - 16:25)
Да.

А оно того стоит, доводить до ошибки в запросе? Не лучше-ли проверять все возможные варианты?

Спустя 10 часов, 5 минут, 49 секунд (11.04.2009 - 10:33) sergeiss написал(а):
Цитата (kirik @ 11.04.2009 - 00:28)
Цитата (sergeiss @ 10.04.2009 - 16:25)
Да.

А оно того стоит, доводить до ошибки в запросе? Не лучше-ли проверять все возможные варианты?

Не всегда получается.
Вот представь, что есть сложный запрос. В подзапросе сначала находятся данные из одной таблицы, которые используются для поиска данных в других таблицах. Например, перечень каких-то объектов, соответствующих определенным критериям. Но если набор данных окажется пустой, то запрос в целом будет ошибочным.
На момент формирования запроса такие тонкости неизвестны.

Изначально я могу только проверить, чтоб определенного типа данные были вообще введены, да чтоб начальная дата были меньше конечной.

Спустя 11 часов, 46 минут, 14 секунд (11.04.2009 - 22:20) kirik написал(а):
sergeiss, понял. Вопросов больше не имею smile.gif
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2025 Invision Power Services, Inc.