PHP . SU
Программирование на PHP, MySQL и другие веб-технологии
Страниц (23): [1] 2 3 4 5 6 7 8 9 ... » В конец
Найдено сообщений: 340
maragon
Отправлено: 03 Мая, 2021 - 22:21:50 • Тема: sitemap.xml не доступен • Форум: Вопросы новичков
Ответов: 0 Просмотров: 214
CODE (
htmlphp ):
скопировать код в буфер обмена
AddDefaultCharset UTF-8
ErrorDocument 403 /404
ErrorDocument 404 /404
RewriteEngine on
RewriteBase /
RewriteRule ^admin($|/) - [L]
RewriteRule ^/admin($|/) - [L]
RewriteRule ^faq/?$ index.php?module=faqs [L,QSA]
RewriteRule ^faq/([^/]*)/?$ index.php?module=faq&id=$1 [L,QSA]
RewriteRule ^videos/?$ index.php?module=videos [L,QSA]
RewriteRule ^video/([^/]*)/?$ index.php?module=video&id=$1&url=videos [L,QSA]
RewriteRule ^reviews/?$ index.php?module=reviews [L,QSA]
RewriteRule ^register/?$ index.php?module=go&action=register [L,QSA]
RewriteRule ^login/?$ index.php?module=go&action=login [L,QSA]
RewriteRule ^cron/([^/]*)/?$ index.php?cron=$1 [L,QSA]
RewriteRule ^cron/([^/]*)/([^/]*)/?$ index.php?cron=$1&action=$2 [L,QSA]
RewriteRule ^upload/?$ upload.php [L,QSA]
RewriteRule ^sitemap.xml?$ sitemap.php [L,QSA]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^/]*)/([^/]*)/?$ index.php?module=page&category_url=$1&url=$2 [L,QSA]
RewriteRule ^/?$ index.php?module=page&url= [L,QSA]
RewriteRule ^([^/]*)/?$ index.php?module=category&url=$1 [L,QSA]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^static/([^/]*) resize.php?filename=$1
Не доступен из браузера мой sitemap.xml
Если удалить строку "RewriteRule ^([^/]*)/([^/]*)/?$ index.php?module=page&category_url=$1&url=$2 [L,QSA]" - то xml файл открывает из браузера.
Может кто поможет?
maragon
Отправлено: 22 Февраля, 2016 - 10:02:54 • Тема: MVC PHP • Форум: Вопросы новичков
Ответов: 3 Просмотров: 222
1. Про контроллер разжували - спасибо!
2. Про Loader.php понял.
Цитата:
лучше spl autoload
еще лучше psr и composer autolod
- Почитаю, попробую.
А в чем собсно каша?
На ошибках так скачать и учатся, мало адекватных и разжеванных примеров в сети, оперировался, вроде бы, на статью об MVC от пользователя EuGen.
maragon
Отправлено: 22 Февраля, 2016 - 09:42:33 • Тема: MVC PHP • Форум: Вопросы новичков
Ответов: 3 Просмотров: 222
Приветствую. Много гуглил, читал, смотрел о паттерне.
Решил реализовать и попробовать.
Единая точка входа, далее:
Index.php
PHP:
скопировать код в буфер обмена
require_once ( ROOT . '/classes/Loader.php' ) ;
$router = new Router( ) ;
if ( ( $display = $router -> run ( ) ) !== false ) {
print $display ;
} else {
header ( "HTTP/1.0 404 Not Found" ) ; }
Loader.php
PHP:
скопировать код в буфер обмена
<?PHP
ROOT . '/modules' . PATH_SEPARATOR .
function __autoload( $class_name )
{
$file_name = str_replace ( '_' , '/' , $class_name ) . '.php' ; $result = include_once ( $file_name ) ;
return $result ;
}
?>
Controller.php
PHP:
скопировать код в буфер обмена
<?PHP
/**
* Класс для работы с контроллерами
*/
class Controller {
/**
* Получаем контроллер вызываемого модуля
*/
public function get( $module , $action ) {
$controller_class = ucfirst ( $module ) . '_Controller' ; $file_controller = ROOT . '/modules/' . $module . '/Controller.php' ;
//die ('Файл контроллера ' . $controller . ' не найден');
return false ;
}
include_once ( $file_controller ) ;
$controller = new $controller_class ( ) ;
}
//die ('Метод ' . $action . ' не найден в контроллере ' . $controller_class);
return false ;
}
return $controller -> $action ( ) ;
}
}
Model.php
PHP:
скопировать код в буфер обмена
<?PHP
/**
* Класс для работы с моделями
*/
class Model {
protected $db ;
public function __construct( ) {
$this -> db = new Database( ) ;
}
/**
* Получаем модель вызываемого модуля
*/
public function get( $module ) {
$model_class = $module ;
$file_model = ROOT . '/modules/' . $module . '/Model.php' ;
//die ('Файл модели ' . $module . ' не найден');
return false ;
}
include_once ( $file_model ) ;
$model = new $model_class ( ) ;
}
return $model ;
}
}
Router.php
PHP:
скопировать код в буфер обмена
<?PHP
/**
Класс роутера
*/
class Router {
protected $request ;
protected $controller ;
protected $model ;
public function __construct( ) {
$this -> request = new Request( ) ;
$this -> controller = new Controller( ) ;
$this -> model = new Model( ) ;
}
public function run( ) {
$module = $this -> request -> get ( 'module' ) ;
$action = $this -> request -> get ( 'action' ) ;
$module = 'main' ;
}
$action = 'Index' ;
}
return $this -> controller -> get ( $module , $action ) ;
}
}
Класс шаблонизатора и дб прикладывать не буду, посколько смысл вопроса к ним не относится.
1. На данном этапе проектирование может я чего-то упустил?
2. Мне не нравится как реализован контроллер вызываемого модуля. Возможно-ли переделать?
Действия:
1. Пришел пользователь на страницу - роутер смотрит урл и подключает нужный контроллер и модель
2. Сам контроллер (если допустим мы на главной):
PHP:
скопировать код в буфер обмена
class Main_Controller extends Controller {
protected $main ;
function __construct( ) {
$this -> main = new Main_Model( ) ;
}
public function Index( ) {
return 'main controller - index;)' ;
}
public function Test( ) {
return 'main controller - test ;)' ;
}
}
3. Модель
Возможно ли отказаться от __construct() в контроллере модуля?
Слышал о Signleton и Instance, но пока не представляю как это сделать.
Что я еще упустил? Всем спасибо!
maragon
Отправлено: 23 Июля, 2015 - 18:00:40 • Тема: Генерация графиков • Форум: Вопросы новичков
Ответов: 5 Просмотров: 490
DelphinPRO пишет: В windows нет понятия "права доступа" Улыбка они всегда 0777
Спасибо, отныне буду знать!
Viper пишет: Говнокод канеш у вас знатный. Не проще было взять ffmpeg + gnuplot?
И вправду говнокод. С ffmpeg'ом разобрался, как по мне проще и функциональнее.
А вот вопрос, как перегнать wav to png через gnuplot? Примеров не нашел..
maragon
Отправлено: 22 Июля, 2015 - 22:40:16 • Тема: Генерация графиков • Форум: Вопросы новичков
Ответов: 5 Просмотров: 490
Уже который день сижу, все никак вкурить не могу.
Скриптик по типу wav2png.
PHP:
скопировать код в буфер обмена
<?PHP
class Waveform {
public static function create( $audio_file , $user_id , $file_id , $invert = false ) {
ini_set ( "max_execution_time" , "60000" ) ; $width = "500" ;
$height = "100" ;
$color = "#f01256" ;
$ROOT = ROOT_DIR;
$ATTACHS = $ROOT . "uploads/" . $user_id . "/" ;
$file = $ATTACHS . $filename ;
copy ( $ATTACHS . $audio_file , $ATTACHS . $filename . "_o.mp3" ) ; exec ( $ROOT . "/lame " . $ATTACHS . $file . "_o.mp3 -f -m m -b 16 --resample 8 " . $ATTACHS . $file . ".mp3 && " . $ROOT . "/lame --decode " . $ATTACHS . $file . ".mp3 " . $ATTACHS . $file . ".wav" ) ; $filename = "{$file} .wav" ;
$handle = fopen ( $filename , "r" ) ; $header [ ] = fread ( $handle , 4
) ; $header [ ] = fread ( $handle , 4
) ; $header [ ] = fread ( $handle , 4
) ; $header [ ] = fread ( $handle , 4
) ; $byte = $bits / 8 ;
if ( $channels == 2) {
$skip = 40 ;
}
else {
$skip = 80 ;
}
for ( $i = 0 ; $i < $byte ; $i ++ ) {
$bytes [ $i ] = fgetc ( $handle ) ; }
switch ( $byte ) {
case 1:
$data [ ] = self :: getAmplitude ( $bytes [ 0] , $bytes [ 1] ) ;
break ;
case 2:
if ( ord ( $bytes [ 1
] ) & 128
) { $temp = 0 ;
}
else {
$temp = 128 ;
}
$temp = chr ( ( ord ( $bytes [ 1
] ) & 127
) + $temp ) ; $data [ ] = floor ( self :: getAmplitude ( $bytes [ 0
] , $temp ) / 256
) ; break ;
}
}
list ( $r , $g , $b ) = self :: html2rgb ( $color ) ; for ( $d = 0 ; $d < sizeof ( $data ) ; $d += DETAIL
) { $v = ( int) ( $data [ $d ] / 255 * $height ) ;
$x = $d / DETAIL;
if ( $invert ) {
imageline ( $img , $x , 0
, $x , ( $height - $v ) , $color ) ; imageline ( $img , $x , $height - ( $height - $v ) , $x , $height , $color ) ; } else {
imageline ( $img , $x , 0
+ ( $height - $v ) , $x , $height - ( $height - $v ) , $color ) ; }
}
if ( imagepng ( $rimg , $ROOT . "/waveforms/" . $file_id . ".png" ) ) { return 1 ;
} else {
return 0 ;
}
}
private static function getAmplitude( $byte1 , $byte2 ) {
return ( $byte1 + ( $byte2 * 256) ) ;
}
private static function html2rgb( $input ) {
$input = ( $input [ 0 ] == "#" ) ?
substr ( $input , 1
, 6
) : substr ( $input , 0
, 6
) ; ) ;
}
}
?>
Но есть как всегда одно Но!
Если смотреть по скрипту:
Файлы перекодирует нормально через LAME в .wav формат.
А дальше начинается "ахтунг".. То ли дело в путях, то ли я чего-то не так указал.
Если подставить в скрипт название уже сгенерированного .wav файла от руки вот в это место [ $handle = fopen($filename , "r"); ] - то при обновлении страницы происходит генерация изображения + .wav'ку удаляет, как и задуманно в скрипте (т.е. все работает ) .
В основном ругается так:
(не может открыть, хотя файл есть и права стоят 777)
fopen(D:\AppServ\www/uploads/39/d917f82583b7bac18e2b.wav) [function.fopen]: failed to open stream: No such file or directory in ...
(не может удалить, хотя файл есть и права стоят 777, если воткнут @ то удалит файл)
Warning: unlink(D:\AppServ\www/uploads/39/b763a2f212b89ad4e840.mp3) [function.unlink]: No such file or directory in
Куда копать?
maragon
Отправлено: 30 Июня, 2015 - 12:18:09 • Тема: Категория форума -> фоурмы • Форум: Вопросы новичков
Ответов: 5 Просмотров: 346
Viper пишет: Я такое на php делал, а не средствами БД. У вас есть связь по ID между форумами и подфорумами. Выбираете все форумы, потом все подфорумы и в цикле создаете новый массив связав по ID.
А можно пример?
maragon
Отправлено: 30 Июня, 2015 - 00:11:54 • Тема: Категория форума -> фоурмы • Форум: Вопросы новичков
Ответов: 5 Просмотров: 346
Сейчас вывожу так, но это не есть хорошо
PHP:
скопировать код в буфер обмена
$sql = $db -> super_query ( "SELECT `" . PREFIX. "_forum_categories`.`id`,
`" . PREFIX. "_forum_categories`.`name`
FROM `" . PREFIX. "_forum_categories`
" , 1) ;
if ( $sql ) {
foreach ( $sql As $row ) {
$tpl -> load_template ( 'forum/category.tpl' ) ;
$tpl -> set ( '{name}' , $row [ 'name' ] ) ;
$tpl -> compile ( 'content' ) ;
$sql = $db -> super_query ( "SELECT `" . PREFIX. "_forum`.`id`,
`" . PREFIX. "_forum`.`name`,
`" . PREFIX. "_forum`.`description`,
`" . PREFIX. "_forum`.`count_messages`,
`" . PREFIX. "_forum`.`count_topics`,
`" . PREFIX. "_forum`.`forum_icon`
FROM `" . PREFIX. "_forum`
WHERE `" . PREFIX. "_forum`.`category` = '" . $row [ 'id' ] . "'
" , 1) ;
if ( $sql ) {
$tpl -> load_template ( 'forum/forum.tpl' ) ;
foreach ( $sql AS $row ) {
$tpl -> set ( '{forum_id}' , $row [ 'id' ] ) ;
$tpl -> set ( '{forum_name}' , $row [ 'name' ] ) ;
$tpl -> set ( '{forum_description}' , $row [ 'description' ] ) ;
$tpl -> set ( '{count_messages}' , $row [ 'count_messages' ] ) ;
$tpl -> set ( '{count_topics}' , $row [ 'count_topics' ] ) ;
if ( file_exists ( ROOT_DIR
. "/templates/" . $config [ 'temp' ] . "/images/forum/" . $row [ 'forum_icon' ] ) ) { $tpl -> set ( '{forum_icon}' , "/templates/" . $config [ 'temp' ] . "/images/forum/" . $row [ 'forum_icon' ] ) ;
} else {
$tpl -> set ( '{forum_icon}' , "/templates/" . $config [ 'temp' ] . "/images/forum/no.png" ) ;
}
$tpl -> compile ( 'content' ) ;
}
}
}
} else { msgbox( 'Ошибка' , 'Форумы не найдены' , 'Обратитесь к данной странице позже' , 'info' ) ; }
maragon
Отправлено: 29 Июня, 2015 - 19:39:03 • Тема: Категория форума -> фоурмы • Форум: Вопросы новичков
Ответов: 5 Просмотров: 346
Мучался, вроде просто - а не туда, ни сюда.
Две таблицы: Категория форума / Форумы
Нужно вывести втаком порядке:
CODE (
SQL ):
скопировать код в буфер обмена
Таблица `forum` :
`id` ( int) , `category` ( int) , `name` ( varchar)
1 | Форум 1 | Первый форум
2 | Форум 2 | Второй форум
Куда копать?
Пробовал так, но не то.. Группировка не помогает.
CODE (
SQL ):
скопировать код в буфер обмена
SELECT forum. name, forum_category. name AS cat_name FROM forum
LEFT JOIN forum_category. category ON forum_category. id = forum. category
GROUP BY forum. category
ORDER BY forum. id ASC ;
maragon
Отправлено: 25 Июня, 2015 - 22:34:21 • Тема: Помощь с jPlayer в Wordpress • Форум: Вопросы новичков
Ответов: 8 Просмотров: 426
Тоже как то мучался для своего детища.
посмотрел на сторону портала promodj.com, у них, когда выводишь аудиофайлы из бд, генерируешь <script></script>, в котором
А дальше, дело за малым.
CODE (
javascript ):
скопировать код в буфер обмена
var player = {
view: function ( id, url) {
$( "#player" + id) .jPlayer ( {
ready: function ( ) {
$( this ) .jPlayer ( "setMedia" , {
mp3: url,
oga: ""
} ) ;
} ,
swfPath: "/js" ,
.... и т.д. курить документацию jplayer надо
} ) ;
}
}
Как пример.
Писал на коленке..
maragon
Отправлено: 25 Июня, 2015 - 18:44:57 • Тема: Проверка адреса соц.сетей • Форум: Вопросы новичков
Ответов: 1 Просмотров: 127
У пользователей на сайте есть поля (Вк, Ок, Твиттера и т.д.). Сейчас проверяю их так:
PHP:
скопировать код в буфер обмена
$user_skype = $_POST [ 'skype' ] ; //+ проеврка
$arr_user_sk = explode ( '/' , $user_skype ) ; $arr_user_sk = $arr_user_sk [ 2] ; //Выдираю адрес полный
if ( $arr_user_sk == "twitter.com" ) {
echo "Молодец" ;
} else {
echo "Не молодец" ;
}
Можно же попроще сделать? Регулярку пустить или еще шо.
maragon
Отправлено: 23 Июня, 2015 - 15:54:10 • Тема: Cache -> постраничный • Форум: Вопросы новичков
Ответов: 0 Просмотров: 91
Функции кеша: (запись \ чтение)
PHP:
скопировать код в буфер обмена
function create_cache( $prefix , $cache_text ) {
$filename = ENGINE_DIR. '/cache/' . $prefix . '.tmp' ;
$fp = fopen ( $filename , 'wb+' ) ; }
function view_cache( $prefix ) {
$filename = ENGINE_DIR. '/cache/' . $prefix . '.tmp' ;
}
+ serilize / unserialize
Такой штукой кеширую блоки у пользователей сайта (информацию и прочее).
Возможно ли закешировать постраничную навигацию?
Например вытаскиваю все фотографии или же аудиозаписи постранично.
Пример кеширования данных пользователя:
PHP:
скопировать код в буфер обмена
$id = intval ( $_GET [ 'id' ] ) ; //ID пользователя $row = unserialize ( view_cache
( 'profile_' . $id ) ) ; //Смотрим кэш if ( ! $row ) { //Проверяем на наличие кеша, если нету то выводи из БД и создаём его
$row = $db -> super_query ( "SELECT * FROM `users` WHERE `user_id` = '" . $id . "'" ) ;
if ( $row ) {
create_cache
( 'profile_' . $id , serialize ( $row ) ) ; // Создаём кеш }
} else { //Кеш есть - вытаскиваю
echo $row [ 'user_login' ] ;
}
maragon
Отправлено: 17 Июня, 2015 - 23:01:39 • Тема: Код активации раз в час • Форум: Вопросы новичков
Ответов: 1 Просмотров: 143
Засыпаю за железным другом.. Задача то простая, но все никак.
- При регистрации высылаю смс-ку с кодом активации.
- Добавляю запрос в таблицу fh_activate { id, user_login, time } где time = time(); типо смс-выслал, дата последнего записалась.
- Тперь, когда пользователь каким-то макаром затеряет смс-ку в своем крутом смартфоне, нужно её отправить еще раз. Для этого есть ф-я выслать повторно .
Одно но, надо чтобы она была доступна раз в сутки например (60*60*24).
Вопрос:
Как высчитать правильно время и дать добро на отправку смс?
Как показать оставшееся время, если не прошло 24 часа?
Збазибо заранее!
maragon
Отправлено: 08 Июня, 2015 - 17:20:08 • Тема: PHP проверка мобильного телефона • Форум: Вопросы новичков
Ответов: 5 Просмотров: 297
Проверка осуществляется следующим образом:
МТС, ТЕЛЕ2, БИЛАЙН и прочие операторы, смс-ки доходят.
Но, номера Украины под эти правила не влазят. Как быть?
Я так понимаю у Украины 12 значн. номера?
Страниц (23): [1] 2 3 4 5 6 7 8 9 ... » В конец
Powered by ExBB FM 1.0 RC1. InvisionExBB