Вопрос № 106776: Здравствуйте граждане php`шники.
Такая вот у меня проблемка:
Открываю файл для чтения, читаю из него данные и потом сортируется массив и опять записывается в файл. Соритровки пока ещё нет, поэтому у меня он просто записывает записывает данные...Вопрос № 106813: Добрый день, уважаемые эксперты. Вопрос может быть и не совсем по теме форума, однако попробую его сформулировать здесь.
Имеется локальная база данных по абонентам с ничислениями, оплатой, корректировкой и субсидиями. всего абонентов порядка 2500...Вопрос № 106918: Здравствуйте.
Подскажите, пожалуйста:
Картинки хранятся в БД(тип blob). Необходимо загрузить картинку из БД и расположить на уже готовом изображении, созданном при помощи библиотеки GD.
Получилось вывести картинку по следующему примеру:<b...Вопрос № 106921: Уважаемые эксперты, подскажите, почему не показываются ошибки, связаные с класами в PHP5?
...Вопрос № 107012: Доброго времени суток, уважаемые эксперты.
Вопрос в следующем:
- вебсервер Аппач;
- авторизация .htaccess;
- вход по умолчанию на index.php.
В какой переменной будет находится логин вошедшего на сайт?
Необходимо перенаправлят...Вопрос № 107096: Здраствуйте
у меня задача.
Я защищаю файл от загрузок по средствам формы, т.е. заполнив форму если все верно читаю файл и вывожу на печать предварительно сформировав заголовки:
if( !is_error() ){
/*
* @ load file...Вопрос № 107185: Доброе время суток!!!
Вопрос следующий:
Есть сайт на хостинге jino-net.ru
По ftp залит движок mamba-cms.
Нужно задать аттрибуты на заданный каталог и все файли и подкаталоги, находящиеся в нем (например, что-то наподобие CHMOD 777).<...Вопрос № 107190: список файлов вида ..data/$yaer-$month-$day.txt => $mass;
то есть файлы в /data/ 07-09-12.txt......06-08-13.txt
надо поместить в массив и вывести в календарь.
что бы при клике на дату генерировалась ссылка вида http://...../index.php?d...Вопрос № 107205: Здравствуйте уважаемые эксперты! Помогите мне разобраться, что я делаю не так ...
Мне нужно чтобы происходила проверка корректности переменной функцией preg_match ...Вопрос № 107328: Здравствуйте уважаемые!
Читаю из файла данные построчно и мне нужно, чтобы каждая строка была преобразована в массив. Данные в строке разделены пробелами, но сложность в том, что количество пробелов между данными нефиксировано.
Использовал та...Вопрос № 107331: Здравствуйте.
Сайт у меня состоит из многих папок. Необходимо обеспечить вставку кода header и footer. Но чтобы путь был с http:. То есть, чтобы разместив в одном месте необходимый код, в любой из директорий этот код вызывался бы одинаковой коман...
Вопрос № 106.776
Здравствуйте граждане php`шники.
Такая вот у меня проблемка:
Открываю файл для чтения, читаю из него данные и потом сортируется массив и опять записывается в файл. Соритровки пока ещё нет, поэтому у меня он просто записывает записывает данные в обратном порядке. (код в приложении)
В файле данные имеют такую структуру:
Данные1.1>>Данные1.2>>Данные1.3
Данные2.1>>Данные2.2>>Данные2.3
Данные3.1>>Данные3.2>>Данные3.3
........
Всё работает прекрасно, кроме одного: почему-то, при записи, в конечном файле добавляется одна пустая строка в конце. Добавляется она потому, что в файле последний элемент каждой строки закачивается символами «/n», т.е. переходит на новую строчку. Но что то никак не соображу, как убрать эту пустую строку, чтобы она не добавлялась. Пытался вырезать у последнего элемента последний символ, т.к. именно он должен быть символом перехода на новую строку, но при этом вырезался один символ из данных и пустая строка всё
равно присутствовала.
Так как можно убрать добавление пустой строки?
Это можно решить следующим образом:
во-первых убираем конкантенацию символов перехода на другую строку из строки -
$prox_ball[$i-1]=$prox_ball[$i-1]."
";
оставляем только
$prox_ball[$i-1]=$prox_ball[$i-1];
во-вторых добавляем в цикл записи данных в файл следующую строчку -
if($i!=$kol_vo_abiturientov)fwrite("
");
то есть:
for ($i=$kol_vo_abiturientov;$i!=-1;$i--)
{
if($i!=$kol_vo_abiturientov)fwrite("
");
if ($i==-1) $prox_ball[0]=substr($prox_ball[0],2,strlen($prox_ball[0])-2);
fwrite($file_dannyx,$fio[$i].">>".$nabr_ball[$i].">>".$prox_ball[$i]);
//$i--;
}
Полностью исправленный код в приложении.
Приложение:
Ответ отправил: GINes (статус: 8-ой класс)
Ответ отправлен: 25.10.2007, 21:25 Оценка за ответ: 3 Комментарий оценки: К сожалению, ваш код по прежнему оставляет последнюю строку в файле, но ещё плюс добавляет лишнюю строку перед всеми запясями кроме первой.... Так что только 3
При чтении текстового файла Вы считываете файл построчно, вместе с признаком переноса (новой) строки. А при записи в файл необходимо его добавлять в конце каждой строки.
Настойчиво рекомендую избавляться от него во время чтения файла (например функцией trim() или rtrim() ), поскольку в будущем это может осложнить Вам задачу (например изменится порядок столбцов и перенос строки будет стоять не там где нужно). Можно убедиться в том, что переносы строк идут вместе с данными, посмотрев исходный текст html-страницы в браузере.
Соответственно изменяем чтение файла:
$dat=trim(fgets($file_dannyx));
Также, сразу после этой строки, рекомендую добавить проверку на присутствие данных:
if( $dat!='' ){
....
$i++;
}
Убираем строку (где нужно мы добавим переносы при записи):
$prox_ball[$i-1]=$prox_ball[$i-1]."
";
Ну и запись файла, с добавлением переноса строк, если это не последняя строка ($i!=0):
for ($i=$kol_vo_abiturientov;$i>=0;$i--)
{
fwrite($file_dannyx,$fio[$i].">>".$nabr_ball[$i].">>".$prox_ball[$i]);
if( $i!=0 ) fwrite($file_dannyx,"
");
}
--------- Иногда движение вперед-результат пинка под зад
Ответ отправил: Mamont (статус: 3-ий класс)
Ответ отправлен: 25.10.2007, 23:18 Оценка за ответ: 5 Комментарий оценки: Большое спасибо за ваш ответ, я просто не знал о такой полезной функции, как trim. Теперь всё работает так, как надо!
Вопрос № 106.813
Добрый день, уважаемые эксперты. Вопрос может быть и не совсем по теме форума, однако попробую его сформулировать здесь.
Имеется локальная база данных по абонентам с ничислениями, оплатой, корректировкой и субсидиями. всего абонентов порядка 25000 лицевых счетов. Структура локальной базы данных такова, что все данные по начаслениям и оплатам по абонентам хранятся в файле формата *.DAT но вытащить в *.DBF возможно. Веду вот к чему. Хочу сделать WEB базу данных (желательно в связке PHP+mySQL), чтобы абонент смог просмотреть ВСЕ свои начисления, льготы, оплаты и корректировки, когда они у него были сделаны (т.е. привязать платеж
или начисление к дате), за любой интервал времени. Никак не могу сообразить каким образом организовать хранение данных в mySQL. Ну со структурой основной таблицы вроде ясно (лицевой счет, Улица, Дом, Индекс дома, корпус, Квартира, Индекс квартиры), а вот как организовать хранение данных по начислениям и оплатам - что то не вытанцовывается. Проблема в том, что из месяца в месяц постоянно в один день происходит начисление по абоненту (Скажем 01.11.2007 начислено 100 рублей),
а вот оплаты поступают нерегулярно, т.е. в одном месяце их может быть несколько, а вдругом их может вообще не быть. То же самое и с корректировками, субсидиями и льготами. В локальной базе данных всё привязывается лицевому счету абонента, а потом к датам. Подскажите, может быть кто-нибудь уже решал подобные задачи, как организовать хранение таких данных в mySQL? В общем, подскажите как структурировать таблицы по начислениям и оплатам. Заранее спасибо.
Для этого можно использовать еще одну таблицу с операциями. Поля:
ID записи (уникальное)
ID пользователя (берется из первой таблицы - по кому проходит операция)
Дата - дата проведения операции
Операция - начисления, оплата, корректировка и субсидия
Сумма (положительная - пополнение л/с, отрицательная - списание с л/с; с отрицательными суммами удобнее организовывать различные общие отчеты - например подсчитать насколько изменился баланс за промежуток времени)
а дальше на ваше усмотрение- примечание к операции, откуда пришел платеж и тд.
--------- Иногда движение вперед-результат пинка под зад
Ответ отправил: Mamont (статус: 3-ий класс)
Ответ отправлен: 26.10.2007, 03:01 Оценка за ответ: 5 Комментарий оценки: Спасибо за проявленный интерес. Но мне кажется использовать одну таблицу для хранения данных по всем абонентам может тормозить выборку при больших объемах данных. А вот применение положитульных и отрицательных сумм весьма интересная идея.
Отвечает: Powoditch konstantin
Здравствуйте, Савченко И.В.!
Я бы сделал так:
Создал 2 таблицы(оплаты, начисления) и 1 вспомогательную.
Таблица оплаты:
id | id_scheta | id_payment | date_payment | summ
Вспомогательная таблица:
id | id_scheta | id_payment id_charge
Служит для связывания оплат и начислений с номером счета.
Думаю все поля ясны.
Ответ отправил: Powoditch konstantin (статус: 7-ой класс)
Ответ отправлен: 26.10.2007, 03:02 Оценка за ответ: 5 Комментарий оценки: Большое спасибо за оказанное внимание. Идея разделить виды движений по таблицам очень интересная. Думаю организовать под каждое движение свою таблицу + Вспомогательную таблицу для связывания
Вопрос № 106.918
Здравствуйте.
Подскажите, пожалуйста:
Картинки хранятся в БД(тип blob). Необходимо загрузить картинку из БД и расположить на уже готовом изображении, созданном при помощи библиотеки GD.
Получилось вывести картинку по следующему примеру:
$sqlquery_res="SELECT picture from picture where id=\'4\';";
$res=mysql_query($sqlquery_res,$connection) or
die(mysql_errno($connection).mysql_error($connection));
$img=mysql_fetch_row($res);
$Image=$img[0];
header("Content-type:image/png");
echo "$Image";
Но при попытке копировать изображение на уже готовое
$im=imagecreate(500,500);
$color=imagecolorallocate($im,255,0,0);
imagecopy($im,$Image,10,10,0,0,100,100);
возникает ошибка:
imagepng(): supplied argument is not a valid Image resource
Отвечает: Powoditch konstantin
Здравствуйте, Степанова Дарья Олеговна!
Для начала следует узнать тип картинки. Потом вместо $im=imagecreate(500,500);
можно написать $im=imagecreatefromjpeg(gif,png в зависимости от типа)($Image);
Только вот я не знаю подхватит ли GD такую конструкцию.
Ответ отправил: Powoditch konstantin (статус: 7-ой класс)
Ответ отправлен: 26.10.2007, 19:26
Вопрос № 106.921
Уважаемые эксперты, подскажите, почему не показываются ошибки, связаные с класами в PHP5?
Отвечает: Бородин Александр Олегович
Здравствуйте, Azrr!
Вероятно, это не статическая функция класса sql, а функция объекта класса sql. Поэтому таким образом - sql::connect() - ее вызывать нельзя. Но соль вся в том, что если Вы вызовете ее таким образом, то ошибка либо не выскочит вовсе, либо выскочит при каких-то определенных настройках директивы error_reporting(). Смысл ответа моего вкратце таков: нельзя вызывать функции объектов как статические функции и наоборот. Вероятно, у Вас могут быть проблемы с восприятием понятия static(у
меня такое было, поэтому и спрашиваю). Извините, если я неправ.
--------- Ничто не сближает людей так, как совместное преступление.
Ответ отправил: Бородин Александр Олегович (статус: Студент)
Ответ отправлен: 26.10.2007, 19:55 Оценка за ответ: 4 Комментарий оценки: Спасибо за ответ, но вопрос не в том, где ошибка, это я и сам знаю, вопрос в том, почему эта ошибка никак не отображается и как это можно исправить. У меня весь проект в класах, и любая ошибка внутри класа не отображается.
Вопрос № 107.012
Доброго времени суток, уважаемые эксперты.
Вопрос в следующем:
- вебсервер Аппач;
- авторизация .htaccess;
- вход по умолчанию на index.php.
В какой переменной будет находится логин вошедшего на сайт?
Необходимо перенаправлять (автоматически) каждого посетителя на свою страничку. Мое решение такое:
<?php
$url="/~$_USERLOGIN;
echo '<meta http-equiv="refresh" content="0;URL='.$url.'">';
?>
($url - это я для наглядности, можно и без него)
где $_USERLOGIN - та самая гипотетическая переменная, которая как м не думается должна существовать и где находится логин вошедшего, одновременно это имя персональной директории вошедшего.
Предполагается для каждого посетителя своя папка (посетители все заранее известны, нежданные не приветствуются :-) )
Если кроме ответа на вопрос, появится желание прокоментировать мое решение, буду признателен. (начинающий пшп-ник :-) .
Спасибо.
Отправлен: 27.10.2007, 18:56
Вопрос задал: Grist (статус: Посетитель)
Всего ответов: 1 Мини-форум вопроса >>> (сообщений: 0)
Отвечает: Миленин Александр
Здравствуйте, Grist!
Логин вошедшего на сайт будет содержаться в $PHP_AUTH_USER.
Приложение:
Ответ отправил: Миленин Александр (статус: 7-ой класс)
Ответ отправлен: 27.10.2007, 19:05 Оценка за ответ: 5 Комментарий оценки: БОльшое спасибо. :-)
Вопрос № 107.096
Здраствуйте
у меня задача.
Я защищаю файл от загрузок по средствам формы, т.е. заполнив форму если все верно читаю файл и вывожу на печать предварительно сформировав заголовки:
if( !is_error() ){
Но здесь небольшая проблема если файл большой то такое не возможно.
Времени не хватит на 30сек.
Как мне реализовать по другому защиту от скачивания файлов.
Отвечает: Евгений Неверов
Здравствуйте, Дмитрий Владимирович!
Следует сделать примерно так:
set_time_limit(0);
$h = fopen( $file , "rb" );
while(!feof($h)) {
echo fread($h, 4096);
flush();
}
fclose($h); exit;
Таким образом, мы выводим файл не целиком, а по кусочкам (по 4 Кб), тем самым решаем проблемы со временем закачки и переполнением памяти.
Ответ отправил: Евгений Неверов (статус: Студент)
Ответ отправлен: 28.10.2007, 12:48 Оценка за ответ: 3 Комментарий оценки: set_time_limit как я знаю большинство хостеров не позволяют на моем стоит вообще 20 сек.
Отвечает: Миленин Александр
Здравствуйте, Оськин Дмитрий Владимирович!
"Как мне реализовать по другому защиту от скачивания файлов" - Вобщето вы не показали, как защищаете файл, если не считать if( !is_error()).
"Времени не хватит на 30сек." - Установите set_time_limit(0);
Ответ отправил: Миленин Александр (статус: 7-ой класс)
Ответ отправлен: 28.10.2007, 12:56
Отвечает: Бородин Александр Олегович
Здравствуйте, Оськин Дмитрий Владимирович!
А почему бы не попробовать решить задачку средствами .htaccess? Вам нужна защита от скачивания, ну и переадресуйте прямые запросы к файлам, которые Вы хотите защитить, на какой-нибудь скрипт. Самый простой пример:
RewriteEngine On
RewriteRule /path/to/files/.* warning.php
Нужна поддержка mod_rewrite. При таком раскладе файл нельзя будет скачать, притом, на мой взгляд, делается это "малой кровью". Поскольку пример простой, его надо еще адаптировать под конкретную задачу, потому что в данной реализации он не позволяет запросы ни к каким файлам в каталоге /path/to/files/.
--------- Ничто не сближает людей так, как совместное преступление.
Ответ отправил: Бородин Александр Олегович (статус: Студент)
Ответ отправлен: 28.10.2007, 22:08 Оценка за ответ: 4 Комментарий оценки: сообразил. Все таки приходится все самому догонять;)
Все просто, если доступ разрешен на закачку файла, просто создаем в папке скажем fales копию файла например copy("secretdir/file.rar","files/".md5(rand()).".rar") и редиректом на него header('location '.$file);
и файлы старее скажем нескольких часов
удаляем из папки, связи на них теряются.
Вопрос № 107.185
Доброе время суток!!!
Вопрос следующий:
Есть сайт на хостинге jino-net.ru
По ftp залит движок mamba-cms.
Нужно задать аттрибуты на заданный каталог и все файли и подкаталоги, находящиеся в нем (например, что-то наподобие CHMOD 777).
Дело в том, что файловые менеджеры, такие как far, Total Commander ставят аттрибуты только на каталог, а ставить их вручную на все дерево - очень долго.
Подскажите, пожалуйста, как будет выглядеть скрипт, которым можно это сделать, или пришлите ссылку на готовый скрипт.
Заранее благодарен.
С уважением.
Павел Форсман.
Отвечает: Миленин Александр
Здравствуйте, Форсман Павел Вячеславович!
В приложении приведён пример скрипта, рекурмивно изменяющего права.
Приложение:
Ответ отправил: Миленин Александр (статус: 7-ой класс)
Ответ отправлен: 29.10.2007, 00:07 Оценка за ответ: 5 Комментарий оценки: Огромное спасибо!!!
Скрипт отличный, буду пользоваться!!!
Отвечает: M@gi$†e®
Здравствуйте, Форсман Павел Вячеславович!
Про far не скажу, а в Total Commander в диалоге редактирования атрибутов есть опция "Обрабатывать содержимое подкаталогов"...
--------- Aquila non Capta Muscas
Ответ отправил: M@gi$†e® (статус: 6-ой класс)
Ответ отправлен: 29.10.2007, 18:06
Вопрос № 107.190
список файлов вида ..data/$yaer-$month-$day.txt => $mass;
то есть файлы в /data/ 07-09-12.txt......06-08-13.txt
надо поместить в массив и вывести в календарь.
что бы при клике на дату генерировалась ссылка вида http://...../index.php?data=06-08-13
ну это я сам наверно смогу, главное файлы в календарь поместить.. :-
реально?
для бОльшего понятия я хочу вывести историю переписки из аси на страницу.
два дня разбирался с автозаменой, = разобрался, вот таким способом:
Отвечает: Миленин Александр
Здравствуйте, Kelvin phitrow!
В приложении набросок класса, пока сами сообщения не обрабатываются, а просто выводятся, чуть позе скинуть готовый класс.
Приложение:
Ответ отправил: Миленин Александр (статус: 7-ой класс)
Ответ отправлен: 29.10.2007, 04:31 Оценка за ответ: 5 Комментарий оценки: 5 потому что все идеально!
мысли читаешь!
Вопрос № 107.205
Здравствуйте уважаемые эксперты! Помогите мне разобраться, что я делаю не так ...
Мне нужно чтобы происходила проверка корректности переменной функцией preg_match
Отвечает: Миленин Александр
Здравствуйте, DismalGhost!
Для чисел нужно использовать модификатор d, это означает любое число от 0 до 9, следующие за ним скобки({1,10} - от 1 до 10 символов) определяют колличество символов, по умолчанию 1.
Настоятельно рекомендую указывать ограничители ^ - начало, $ - конец (только после или перед разделителем "/" - в данном случае), т.к. без них будет учитываться любое совпадение, например без ограничителей abc123 пройдёт тест, т.к. содержит цифры.
Ответ отправил: Миленин Александр (статус: 7-ой класс)
Ответ отправлен: 29.10.2007, 09:14 Оценка за ответ: 5 Комментарий оценки: Большое спасибо за развернутый ответ
Отвечает: Miklucho
Здравствуйте, DismalGhost!
Вот верный код (в приложении)
^ - не должно быть ничего в начале
$ - не должно быть ничего в конце
[0-9] - только цифра
+ - может повторятся 1 и более раз
Приложение:
Ответ отправил: Miklucho (статус: Студент)
Ответ отправлен: 29.10.2007, 09:51 Оценка за ответ: 5 Комментарий оценки: Спасибо, теперь стало понятно где я ошибся
Вопрос № 107.328
Здравствуйте уважаемые!
Читаю из файла данные построчно и мне нужно, чтобы каждая строка была преобразована в массив. Данные в строке разделены пробелами, но сложность в том, что количество пробелов между данными нефиксировано.
Использовал такую функцию:
$массив = preg_split('/ /', $строка, -1, PREG_SPLIT_NO_EMPTY);
в большинстве случаев это работает, но увы, в некоторых случаях я получаю пустую ячейку массива, хотя там должны быть данные.
Подскажите, что еще можно использовать, чтобы данные были в ячейках массива невзирая на разное количество пробелов между ними?
Отправлен: 30.10.2007, 07:55
Вопрос задал: sir henry (статус: Академик)
Всего ответов: 3 Мини-форум вопроса >>> (сообщений: 7)
Отвечает: Евгений Неверов
Здравствуйте, sir henry!
Возможно, есть решения проще, это первое, что пришло в голову.
Ответ отправил: Евгений Неверов (статус: Студент)
Ответ отправлен: 30.10.2007, 08:03 Оценка за ответ: 5 Комментарий оценки: Спасибо, сейчас попробую...
Отвечает: Miklucho
Здравствуйте, sir henry!
Как вариант, сначала в строке заменяйте через preg_replace подряд идущие пробелы на один пробел:
preg_replace("/[s]+/"," ",$stroka);
А уже после разбивайте ее функцией explode:
$arrStr=explode(" ",$stroka);
Ответ отправил: Miklucho (статус: Студент)
Ответ отправлен: 30.10.2007, 08:11
Отвечает: HookEst
Здравствуйте, sir henry!
Помещаю:))
/s+/ - pattern для 1 и более пробелов, а флаг PREG_SPLIT_NO_EMPTY указывает на то, что пустые элементы в результат включатся не будут, тогда trim() - не нужен.
Успехов.
Ответ отправил: HookEst (статус: Студент)
Ответ отправлен: 31.10.2007, 08:37 Оценка за ответ: 5 Комментарий оценки: Отлично! Заработало даже без полпинка. :)
Вопрос № 107.331
Здравствуйте.
Сайт у меня состоит из многих папок. Необходимо обеспечить вставку кода header и footer. Но чтобы путь был с http:. То есть, чтобы разместив в одном месте необходимый код, в любой из директорий этот код вызывался бы одинаковой командой. Только начал изучать php, надеюсь на Вашу помощь.
Отвечает: Бородин Александр Олегович
Здравствуйте, Александр Данилюк!
Совсем одинаковой команды, может быть, не получится. Хотя, с другой стороны, можно было бы написать функцию, которая определяет местоположение файла, вызывающего ее, и относительно этого файла строит путь к header и footer.
Попробую привести пример такой функции(просьба не бить, если не сработает, я не мог код протестировать):
Приложение:
--------- Ничто не сближает людей так, как совместное преступление.
Ответ отправил: Бородин Александр Олегович (статус: Студент)
Ответ отправлен: 30.10.2007, 10:20 Оценка за ответ: 4 Комментарий оценки: Мне бы что-то попроще
Отвечает: Евгений Неверов
Здравствуйте, Александр!
Во-первых можно использовать переменную $_SERVER['DOCUMENT_ROOT'], которая всегда указывает на корень сайта.
То есть если у нас header.php и footer.php лежат по адресу /home/.../www/includes/, то к ним всегда (из любого скрипта на сайте) можно подключиться вот так:
include $_SERVER['DOCUMENT_ROOT'] . '/includes/header.php';
include $_SERVER['DOCUMENT_ROOT'] . '/includes/footer.php';
Но я бы предложил другой вариант: если хостер разрешает, то установите собственные значения для PHP-опций auto_prepend_file (PHP-файл с header-ом) и auto_append_file (PHP-файл с footer-ом).
Ответ отправил: Евгений Неверов (статус: Студент)
Ответ отправлен: 30.10.2007, 14:56 Оценка за ответ: 5 Комментарий оценки: Спасибо, буду пробовать, надеюсь сработает
Отвечает: Маров Николай Станиславович
Здравствуйте, Александр Данилюк!
include(dirname(__FILE__)."/includes/header.php");
include(dirname(__FILE__)."/includes/footer.php");
Так как $_SERVER['DOCUMENT_ROOT'] не всегда поддерживается. Но хотя вы врядли встретитесь с такой проблемой.
Ответ отправил: Маров Николай Станиславович (статус: 1-ый класс)
Ответ отправлен: 30.10.2007, 15:18 Оценка за ответ: 4 Комментарий оценки: Не совсем понятно