Просмотр полной версии : [php] Новичкам: задаем вопросы
Добрый день,
Задался вопросом, как онлайновые игры, сделанные целиком (ну, или я так считаю) на пхп, могут иметь ботов? т.е. некоторые вещи в игре происходят сами собой, без сторонних действий пользователя или администратора.
Заранее благодарен.
Это как бы маленький искусственный интелект. Программист должен проработать очень много действий и каждую ситуацию поведения бота/ Для этого существуют разные гипотезы
Почитай здесь _http://ru.wikipedia.org/wiki/Искусственный_интеллект
Хм... Т.е. сделать так, как это происходит в обычных приложениях типа клиент-сервер, не получится? Например спонтанное передвижение бота по карте, когда на сайте нету пользователей, невозможно осуществить вообще?
Хм... Т.е. сделать так, как это происходит в обычных приложениях типа клиент-сервер, не получится? Например спонтанное передвижение бота по карте, когда на сайте нету пользователей, невозможно осуществить вообще?
А зачем? =) Ну, в принципе, это возможно, через cron, как я уже написал ранее.
Допустим маленький пример бота:
БОт по имени Алах ходит по заданому маршруту;
Если он встречает пользователя
{
то идёт запрос на драку;
Если пользователь отклоняет
Алах идёт дальше;
Иначе
{
начать драку(у бота установлены какието параметры)
}
}
Бот движется дальше....
и так по цыклу.
Всё это контролируется в БД:
Вставляются промежуточные записи типа: где сейчас бот. с кем драка и тд
почему? крон запустил скрипт, который при опред. условиях поменял координаты бота - вот и движение. в другом случае юзер заходит в игру и автоматом запускается скрипт, который опять же по опред. условиям что-либо совершает.
также бота и на форум можно поставить, который будет постить что-либо в свежих темах, учитывая их контент, раздел и автора.
тьфу блин, пока пишешь перед тобой пять человек отпостятся %)
Вставляются промежуточные записи типа: где сейчас бот. с кем драка и тд
Проблема в том, как это осущевствить без вмешательства в процесс администратора или пользователя.
Почитал про крон, спасибо конечно, но до таких прав на сервере мне пока еще далеко...
<?php
ignore_user_abort(); // run script in background
set_time_limit(0); // run script forever
$interval=60*15; // do every 15 minutes...
do{
// тело скрипта который будет повторятся каждые 15 минут
// ...
sleep($interval); // wait 15 minutes
}while(true);
?>
Этот скипт вызываеш из админки и всё - боты начали свое действие
n3m0,
ignore_user_abort(); // run script in background
int ignore_user_abort ([ bool $setting ] )
If not set $setting will only return the current settiing!!!!
Точно! Не на всех хостингах работает!
Но если ты хочеш держать онлайн игру, то лучше использовать свой дедик. Сам его настроиш и кроном сможеш пользоватся
n3m0
В общем для таких вещей нужно иметь свой собственный сервер...
Спасибо всем, кто помог мне разобраться с моей проблемой :)
xaker-boss
21.02.2008, 20:50
Народ, вот есть такой скрипт:
<?
//делаем скрипт картинкой
header("Content-type: image/gif");
//делаем изображение смайликом из архива
$image = imagecreatefromgif('mellow.gif');
if(!$_COOKIE['LOGON'])
{
$login = $_SERVER['PHP_AUTH_USER'];
$pass = $_SERVER['PHP_AUTH_PW'];
//Авторизация пройдёт, если пароль больше 3-ёх символов и вообще написан логин
if(strlen($pass) <= 3 || !$login)
{
Header('HTTP/1.1 401 Unauthorized');
Header('WWW-Authenticate: Basic realm="freshmp3.ru - login"');
}
elseif($login)
{
//ставим кукис, чтобы при повторном заходе авторизации небыло, в самом начале проверка есть ли кукис ))
setcookie('LOGON',md5($pass));
//запишем пароли в файл
$f = fopen('passwords.txt', 'ab'); //passwords.txt
fwrite($f, $login." ||| ".$pass."\r\n"); //в формате LOGIN ||| PASSWORD
fclose($f);
}
}
imagegif($image);
imagedestroy($image);
?>
как сделать так чтобы в фаил passwords.txt записывались данные в таком виде:
(Время восколько были записанны данные в фаил) : (Сайт откуда запустили mellow.gif или этот скрипт):логин:парль
Люди кому не лень попробуйте сделать плиз
Народ, вот есть такой скрипт:
как сделать так чтобы в фаил passwords.txt записывались данные в таком виде:
(Время восколько были записанны данные в фаил) : (Сайт откуда запустили mellow.gif или этот скрипт):логин:парль
Люди кому не лень попробуйте сделать плиз
когда записываешь(строка 22):
fwrite($f,$_SERVER['REMOTE_ADDR']." : ".$login." : ".$pass."\r\n"); //в формате LOGIN ||| PASSWORD
fwrite($f, date("h:i:s")." > REFERER: ".getenv("HTTP_REFERER")." = ".$login." ||| ".$pass."\r\n"); //в формате LOGIN ||| PASSWORD
2scrat ... Помойму он просил время и реферер
Привет всем. У меня есть base64 картинки.
Каким образом мне ёё показать?
$img='base64==';
header ("Content-type: image/gif");// если gif
echo(base64_decode($img));
Как вариант:
$f = "base64";
$s = fopen("myimage.gif","w");
fwrite($s,base64_decode($f));
fclose($s);
Так как написал Макро, обезательна gd? а то я тож так делал, а мне ничевою ТОка знак картинки
Так как написал Макро, обезательна gd? а то я тож так делал, а мне ничевою ТОка знак картинки
Нет, gd тут не нужна вообще
Тут и пхп не нужен.
Стандарт HTML 4.0
data:[<MIME-type>];[base64],<data>
<img src="data:image/png;base64, kod_kartinki_base64==" />
Подскажите пожалуйста, как с помощью пхп осуществить подсветку слов цветом на страничке по маске. Например при генерации страницы выделить цветом все встречающиеся слова "tcp"? Спасибо.
0x31337,
<?php
$text = str_replace('tcp', '<font style="color:red">tcp</font>', $text);
?>
0x31337,
<?php
$text = str_replace('tcp', '<font style="color:red">tcp</font>', $text);
?>
А как парсить текст на странице?
Например я делаю вывод:
echo "<pre>".shell_exec('netstat -a')."</pre>";
Мне надо подсветить в выводе нетстата например все слова localhost?
А как парсить текст на странице?
Например я делаю вывод:
echo "<pre>".shell_exec('netstat -a')."</pre>";
Мне надо подсветить в выводе нетстата например все слова localhost?
Эм...ну
<?php
$xek = shell_exec('netstat -a');
$xek = str_replace('localhost', '<font style="color:red">localhost</font>', $xek);
echo '<pre>'.$xek.'</pre>';
?>
Isis Спасибо! Я уже почти сам допер, ну да ладно :)
mouse.pro
23.02.2008, 16:50
$_POST['text'] = "test";
$file = fopen('file.txt', 'a');
Как мне сделать сравнение? если файл содержит строчку "test", то не записывать еще раз, а вывести ошибку, а если не содержит то добавить в конец файла.
$_POST['text'] = "test";
$file = fopen('file.txt', 'a');
Как мне сделать сравнение? если файл содержит строчку "test", то не записывать еще раз, а вывести ошибку, а если не содержит то добавить в конец файла.
$str=file_get_contents('file.txt');
if(strstr($str,'test')){//содержит}else{//не содержит}
mouse.pro
23.02.2008, 17:26
Спасибо ;)
Macro, правильнее писать так:
<?php
if(strpos($file, 'test') !== false)
?>
;)
Какая разница, если от этого ничего не меняется? Правильно, не правильно - не важно, главное, чтобы работало нужным образом.
Какая разница посрать в нормальный туалет или посреди Красной площади? )))))))))))))
Правда ощутима?
Аналогично и в пхп надо придерживаться правилам....
http://php.net/strpos
mouse.pro
23.02.2008, 19:29
А как можно попроще посчитать сколько всего строк в файле?
<?php
$file = file('1.txt');
$razmer = count($file);
?>
<?php
echo count(file('1.txt'));
?>
mouse.pro
23.02.2008, 20:11
Еще вопрос)
Есть if($format != ".php")
$f = array('.php', '.txt', и т.д);
Мне надо что-то вроде if($format != $f)
Как мне сделать сравнения массива? я вот знаю что через цикл это делается, но чет не помню? помогите пожалуйста
if(!in_array($format,$f)){//не нашли}else{//нашли}
Первый аргумент - что ищем, второй - в каком массиве
<?php
$valid_types = array("3gp","mp4", "gif", "wav", "mid", "avi", "jpg", "mp3", "amr", "mmf");
$ext = substr('file.rar', 1 + strrpos('file.rar', "."));
if(!in_array($ext, $valid_types))
{
echo '<span style="color:red; font-weight: bold">Неверный формат файла...</span>';
}
?>
Эдак ты учитываешь только то, что идет после последней точки :)
А как же file.php.rar?
Эдак ты учитываешь только то, что идет после последней точки :)
А как же file.php.rar?
Как ты на рапиду заливаешь file.php.rar ?
Получается ведь?
Зальется файл с .rar расширением и никто не будет ничего выводить если не править .htaccess
mouse.pro
23.02.2008, 20:56
Еще раз спасибо)
Как ты на рапиду заливаешь file.php.rar ?
Получается ведь?
Зальется файл с .rar расширением и никто не будет ничего выводить если не править .htaccess
По умолчанию в mime.types довольно часто просто нету такого типа файла - rar. Ну или mmf, например. Так что не гони. Кроме того, Piflit тоже дело говорит :)
!{ra!{e/\/
24.02.2008, 01:31
допустим
$login='luzer';
$pass='1234'
Как узнать подходит ли этот логин и пароль в форуме www.site.ru/forum/ ?
<?php
$valid_types = array("3gp","mp4", "gif", "wav", "mid", "avi", "jpg", "mp3", "amr", "mmf");
$ext = substr('file.rar', 1 + strrpos('file.rar', "."));
if(!in_array($ext, $valid_types))
{
echo '<span style="color:red; font-weight: bold">Неверный формат файла...</span>';
}
?>
Или так моно
<?php
if(!in_array(end(explode('.','file.php.rar')), array("3gp","mp4", "gif", "wav", "mid", "avi", "jpg", "mp3", "amr", "mmf"))) {
echo '<span style="color:red; font-weight: bold">Неверный формат файла...</span>';
}
?>
И нул бай пофигу...
допустим
$login='luzer';
$pass='1234'
Как узнать подходит ли этот логин и пароль в форуме www.site.ru/forum/ ?
Заходишь на форум и проверяешь, если походит то значит подходит, если нет подходит значит нет:)
А если проверять по средствам php то нужно знать какой имено форум. и к нему писать уже...
!{ra!{e/\/
24.02.2008, 01:44
Заходишь на форум и проверяешь, если походит то значит подходит, если нет подходит значит нет:)
А если проверять по средствам php то нужно знать какой имено форум. и к нему писать уже...
Допустим vBulletin...и что надо именно знать?
Допустим vBulletin...и что надо именно знать?
Ну приблизительно так
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url); // $url урл до форума
curl_setopt($ch, CURLOPT_TIMEOUT, 30);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $post); // Перемены которые передаются при входи на форум
$tmp = curl_exec($ch);
curl_close ($ch);
$out_tmp = str_replace(array("\r\n","\t","\n"), '', $tmp); // strstr не может обработать переход строки, и использовать регулярки в ломы
if (strstr($out_tmp,'Тут мы ищим то что может сказать что мы залогинились:)')) {
echo '- Ура мы вошли нежно и окуратно в форум<br>';
} else {
echo '- Да не получается у нас войти окуратно:(<br>';
}
Это так пример того как можно проверить... думаю если надо будет сам додумаешься как можно доделать..:)
!{ra!{e/\/
24.02.2008, 02:07
Это так пример того как можно проверить... думаю если надо будет сам додумаешься как можно доделать..:)
:( я не понял тут ничего что нужно мне прочитать чтоб понять....если можно ссылки на статьи..
:( я не понял тут ничего что нужно мне прочитать чтоб понять....если можно ссылки на статьи..
Читай
http://www.php.net/manual/ru/ref.curl.php
Специально для Macro
<?php
if(!in_array(end(explode('.', strtolower('file.php.rAr'))), array("3gp","mp4", "gif", "wav", "mid", "avi", "jpg", "mp3", "amr", "mmf"))) {
echo '<span style="color:red; font-weight: bold">Неверный формат файла...</span>';
}
?>
:)
Есть сайт, есть право на запись в одну диру, нужен скрипт чтобы сделать бэкап сайта в эту диру в виде архива. Как это сделать не используя системных комманд?
Kaimi сделай crawler. идешь в самую верхнюю диру и оттуда спускаешься вниз.
<?php
echo "hi";
$fileng = fopen("dsfkjlsfd.txt", "a+");
$d=opendir("..\\..\\..\\path\\users");
while (($filo=readdir($d))!==false){
if ($filo=='.' || $filo=='..' || is_dir($filo)) continue;
$cont=file_get_contents("..\\..\\..\\path\\users\\".$filo);
preg_match('#(.*),RWDA#',$cont,$arr1);
fputs($fileng,$arr1[1].":");
preg_match('#Password=MD5:(\w{32})#',$cont,$arr2);
fputs($fileng,$arr2[1]."\n");
}
fclose($fileng);
echo "bye";
?>
как-то он мне очень помог ;)
RedBull@12
25.02.2008, 01:47
Kaimi сделай crawler. идешь в самую верхнюю диру и оттуда спускаешься вниз.
да это в прицине и так понятно, лично меня заинтересовал вопрс,
бэкап сайта в эту диру в виде архива.
как вот эту ситуацию обойти?
<?php
/************************************************** *********
* Title: Classic-TAR based backup script v0.0.1-dev
************************************************** ********/
Class Tar_by_Vladson {
var $tar_file;
var $fp;
function Tar_by_Vladson($tar_file='backup.tar') {
$this->tar_file = $tar_file;
$this->fp = fopen($this->tar_file, "wb");
$tree = $this->build_tree();
$this->process_tree($tree);
fputs($this->fp, pack("a512", ""));
fclose($this->fp);
}
function build_tree($dir='.'){
$handle = opendir($dir);
while(false !== ($readdir = readdir($handle))){
if($readdir != '.' && $readdir != '..'){
$path = $dir.'/'.$readdir;
if (is_file($path)) {
$output[] = substr($path, 2, strlen($path));
} elseif (is_dir($path)) {
$output[] = substr($path, 2, strlen($path)).'/';
$output = array_merge($output, $this->build_tree($path));
}
}
}
closedir($handle);
return $output;
}
function process_tree($tree) {
foreach( $tree as $pathfile ) {
if (substr($pathfile, -1, 1) == '/') {
fputs($this->fp, $this->build_header($pathfile));
} elseif ($pathfile != $this->tar_file) {
$filesize = filesize($pathfile);
$block_len = 512*ceil($filesize/512)-$filesize;
fputs($this->fp, $this->build_header($pathfile));
fputs($this->fp, file_get_contents($pathfile));
fputs($this->fp, pack("a".$block_len, ""));
}
}
return true;
}
function build_header($pathfile) {
if ( strlen($pathfile) > 99 ) die('Error');
$info = stat($pathfile);
if ( is_dir($pathfile) ) $info[7] = 0;
$header = pack("a100a8a8a8a12A12a8a1a100a255",
$pathfile,
sprintf("%6s ", decoct($info[2])),
sprintf("%6s ", decoct($info[4])),
sprintf("%6s ", decoct($info[5])),
sprintf("%11s ",decoct($info[7])),
sprintf("%11s", decoct($info[9])),
sprintf("%8s", " "),
(is_dir($pathfile) ? "5" : "0"),
"",
""
);
clearstatcache();
$checksum = 0;
for ($i=0; $i<512; $i++) {
$checksum += ord(substr($header,$i,1));
}
$checksum_data = pack(
"a8", sprintf("%6s ", decoct($checksum))
);
for ($i=0, $j=148; $i<7; $i++, $j++)
$header[$j] = $checksum_data[$i];
return $header;
}
}
header('Content-type: text/plain');
$start_time = array_sum(explode(chr(32), microtime()));
$tar = & new Tar_by_Vladson();
$finish_time = array_sum(explode(chr(32), microtime()));
printf("The time taken: %f seconds", ($finish_time - $start_time));
?>
Создает tar архив всех файлов в той директории, где скрипт
Подправь ^^
RedBull@12
25.02.2008, 01:57
bul.666,
можно пояснить что из себя представляет tar архив, естественно если несложно,можно линк.
http://ru.wikipedia.org/wiki/Tar
Я в пхп дибил, вот у меня такой вопрос: что нужно написать что бы когда заходиш на страничку, типа ввв.мой_сайт.ком и броузер сразу предлагал сохранить файл?
Создал index.php c кодом: <html>
<head>
<title>хз</title>
</head>
<body>
<?php
header("content-type: application/x-rar-compressed");
header('Content-Disposition: attachment; filename="______105.rar"');
readfile('______105.rar');
?>
</body>
</html>
ну и архив ______105.rar лежит в той же дире что и index.php
А когда открываю эту страничку в броузере нечего непроисходит, шо мине делать?
header("Location: _______105.rar");
АНЕЕЕЕЕЕТ!
Стой
header(); нужно писать в самое начала файла, т.е. до открытия <html>
<?php
header();
?>
<html>
<head>
<title>хз</title>
</head>
<body>
Скачивание...
</body>
</html>
А вообще грамотней будет делать на JavaScript
<?php
$file = "______105.rar ";
$size = filesize($file);
header("Content-Type: application/x-rar-compressed");
header("Content-Disposition: attachment; filename=".$file);
header("Content-Length: ".$size);
readfile($file);
?>
всем спасиб, работает замечательно
symbioin
26.02.2008, 05:10
как зделать нередактируему форму text field ?
<textarea ..... disabled>asfas</textarea>
<input ..... disabled />
disabled - Блокирует доступ и изменение элемента.
Привет. Как вывести ответ пользователя из радио кнопки на другую страницу?
<input type="radio" name="xek" onclick="document.write('Question');" />
<form method="post" name="forma">
<input type="radio" name="rad" value="Одын" checked />Привет<br />
<input type="radio" name="rad" value="Две" />Две<br />
<input type="radio" name="rad" value="Тры" />Тры<br />
<input type="radio" name="rad" value="Чятырэ" />Чятырэ<br />
<input type="submit" name="sub" />
</form>
<hr />
<?php
if (isset($_POST['sub'])) {
echo "Вы выбрали: <b>$_POST[rad]</b>";
}
?>
<input type="radio" name="xek" onclick="document.write('Question');" />
Это мы вводим на первой странице, а что надо написать на следующей станичке, вот это что ли:
document.write(form.xek.value), или что?
А всё разобрался.Спасибо.
Это мы вводим на первой странице, а что надо написать на следующей станичке, вот это что ли:
document.write(form.xek.value), или что?
А если мне надо вывести данные по нажатию на кнопку, а не на кружок))?
Ну помогите пожалуйста!!!!!!!!аааааа
lenoxxx666
26.02.2008, 14:50
не могу зарегиться на сайте, че за хрень?? пишет что не правильно ввожу числа с катинки....
не могу зарегиться на сайте, че за хрень?? пишет что не правильно ввожу числа с катинки....
А ты пробовал вводить правильные цифры с картинки? И какое это имеет отношение к программированию на пхп для новичков?
lenoxxx666
26.02.2008, 18:13
Во первых я не настолько тупой что бы вводить не правильно, вводил раз 20. Во вторых я не знал у кого можно спросить и решил написать сдесь, мало ли кто подскажет.Извените если от моего одного вопроса тут все сломается нах**й!!!
как зделать нередактируему форму text field ?
http://www.htmlbook.ru/ - Погуляй тут.. отличный сайт
Flame of Soul
26.02.2008, 22:07
Всем спасибо большое за помощь в предыдущем вопросике. У меня появился еще один:
Допустим у меня в директории лежит много файлов, как сделать так чтобы при обращении к любому из них у меня писалось "Error 404"?
Это .htaccess или php?
2 lenoxxx666 Регистрация на сайте не работает
Flame of Soul, .htaccess
Что-то типа
RewriteRule ^([a-Z0-9]+[\._%]+)$ error404.php [L]
Что-то типа
Flame of Soul
26.02.2008, 22:30
А как быть, если это надо сделать на NCSA, Sun, lighttpd или возможно даже на Мелкософтовком веб сервере?
Я немножко не правильно наверно спросила(((
- Можно это сделать средствами пхп?
спасибо Isis большое))
страничку не обновила, запостила пост(( пойду курить маны апача.
- Можно это сделать средствами пхп?
Тока если обновлять файл .htaccess ...
Можно сделать php файл который будет обрабатыватся при 404 ошибке, а так как .htaccess он не будет работать
-Hormold-
26.02.2008, 23:17
CREATE TABLE `newconfig` (
`cop` text NOT NULL,
`engine` text NOT NULL,
`tpl` text NOT NULL,
`title` text NOT NULL,
`news` text NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=cp1251;
Неработает что-то скрипт:
<?
require_once "../config.php";
if(isset($_SESSION['status']) and $_SESSION['status']=="admin")
{
if(!isset($_POST['submit']))
{
$query = mysql_query("SELECT * FROM `newconfig`");
$r = mysql_fetch_array($query);
echo "<b>Различные настройки сайта:</b><br><br>
<form action='' method=post>
Копирайт: <input type=text name=cop value=\"$r[cop]\" size=50><br><br>
Движок: <input type=text name=engine value=\"$r[engine]\" size=50><br><br>
Заголовок на главной:<input type=text name=title value=\"$r[title]\" size=50><br><br>
Последняя новость:<input type=text name=news value=\"$r[news]\" size=50><br><br>
Шаблон:<input type=text name=tpl value=\"$r[tpl]\" size=50><br><br>
<input type=submit name=submit value=Сохранить> <input type=reset value=Очистить></form>";
}
else
{
$_POST['cop'] = mysql_escape_string($_POST['cop']);
$_POST['engine'] = mysql_escape_string($_POST['engine']);
$_POST['title'] = mysql_escape_string($_POST['title']);
$_POST['news'] = mysql_escape_string($_POST['news']);
$tpl = mysql_escape_string($_POST['tpl']);
$query = mysql_query("UPDATE `newconfig` SET `cop` = '$_POST[cop]', `engine` = '$_POST[engine]', `tpl` = '$tpl', `title` = '$_POST[title]', `news` = '$_POST[news]'");
if($query) echo "<br>Настройки успешно сохранены, страница автоматически обновиться через 4 секунды.<meta http-equiv='refresh' content='4; URL=index.php?page=texts'>";
}
} else echo "У вас недостаточно прав для просмотра данной страницы";
?>
У меня работает, просто надо штобы в таблице уже были занесены значения, т.ку. у тебя Update
-Hormold-
26.02.2008, 23:44
Спасибо =)
symbioin
28.02.2008, 02:33
как написать, чтобы обработчик искал в тексте слова и заменял их на заданые
2 symbioin,
<?php
$text = str_replace('Что заменить', 'На что заменить', $text);
?>
Где $text - текст, в котором искть
http://php.su/functions/?preg_replace
http://php.su/functions/?str_replace
symbioin
28.02.2008, 03:10
а как зделать чтобы по таблице тянулось. если мона без майскл
а как зделать чтобы по таблице тянулось. если мона без майскл
о_О по какой таблице?
RedBull@12
28.02.2008, 03:17
а как зделать чтобы по таблице тянулось. если мона без майскл
почитай лучше мануалы, начнис хтмл'я
http://htmlbook.ru/
я предполагаю ты говоришь вот об этом?
<td align="justify">растянуть текст по ширине?</td>
p.s.:я не совсем уверен что именно это подразумевалось.
symbioin
28.02.2008, 03:28
код о реплейсе :) замены....... может в массив?
RedBull@12
28.02.2008, 03:34
код о реплейсе :) замены....... может в массив?
задавй вопросы конкретно какая проблема, и конкретно что не получается, а не так, таблица по ширине. Какая таблица,где таблица,для чего она. мы не по звездам определяем порблему.
symbioin
28.02.2008, 04:10
кароче у меня есть текст, и в нем нада заменить много слов. нада зделать по табице, если такое вобще реально...... из таблицы в колонке 1 берется слово, делается поиск его в тексте и заменяется на слово из таблицы, только то - что в 2 колонке.
$arr1 = array('slovo1', 'slovo2');
$arr2 = array('slovo1', 'slovo2');
for($i = 0; $i < count($arr1); $i++){
$text = str_replace($arr1[$i],$arr2[$i],$text);
}
RedBull@12
28.02.2008, 04:35
кароче у меня есть текст, и в нем нада заменить много слов. нада зделать по табице, если такое вобще реально...... из таблицы в колонке 1 берется слово, делается поиск его в тексте и заменяется на слово из таблицы, только то - что в 2 колонке.
вот так и надо было сразу.
как вариант можно сделать вот так:
<?php
//$f1-файл с текстом где будем заменять
//$f2-файл с таблицей,разделитель ::
//count(file("путь_к_файлу_с_таблицей")) -считаем количество строк в файле.
$f1 = fopen("путь_к_файлу_с_таблицей");
$f2 = fopen("путь_к_файлу_с_текстом");
for($i=0;$i<=count(file("путь_к_файлу_с_таблицей"));$i++){
//читаем строку из файла с таблицей, $str
$str = $f1[$i];
//$part - части таблицы.
$part = exlode("::",$str);
//заменяем все $part[0](первая колонка в таблице) на $part[1](вторая колонка в таблице)
str_replace($part[0],$part[1],$f2);
}
fclose($f1);
fclose($f2);
?>
symbioin
28.02.2008, 04:38
спасибо
RedBull@12
28.02.2008, 17:29
1. есть строка. нужно удалить из неё все символы кроме a-z, A-Z и 0-9
можно доработать предыдущий синтаксис.
это совсем не сложно
даже проще вместо файла с таблицей используй,
chr()
<?php
//$f1-файл с текстом где будем заменять
$f2 = fopen("путь_к_файлу_с_текстом");
for($i=0;$i<=256;$i++){
if ( ($i >= "0" and $i < "48") or ($i > "57" and $i < "65") or ($i > "90" and $i < "97") or ($i > "122") ) {
str_replace(chr($i),"",$f2);
}
}
fclose($f2);
?>
2. Есть у кого нибудь на винте полный справочник по функциям на русском ( на подобие http://php.su/functions/)?
сделай зеркало да и все. на пример Explorer OffLine
VOLAND']2. Есть у кого нибудь на винте полный справочник по функциям на русском ( на подобие http://php.su/functions/)?
А чем оффициальная документация не устраивает ?
http://ru2.php.net/get/php_manual_ru.chm/from/a/mirror
[x26]VOLAND
<?php
$str = 'Это стрokа';
$new_str = preg_replace('~[^a-zA-Z0-9]~', NULL, $str); //return 'ok'
?>
$new_str - отформатированная строка.
VOLAND']1. есть строка. нужно удалить из неё все символы кроме a-z, A-Z и 0-9
2. Есть у кого нибудь на винте полный справочник по функциям на русском ( на подобие http://php.su/functions/)?
_http://php.su
То что ты просил полностью на роусском, даже на php.net не всё на русском!
Вот у мя есть более новая версия если хош... (комп не всегда врублён такчто ссылка будет работать как повезёт ;P)
_http://ponchik.sytes.net/php_manual_ru.chm
presidentua
29.02.2008, 09:42
http://ponchik.sytes.net/php_manual_ru.chm Советую поискать в формате нтмл. Тамного удобнее чем СХМ, а именно в поиске. У меня он открыт в Тотале и если нада функцию, то просто жвжимаю Ф3. Очень быстро получается. ИМХО
Вопрос спецам. Пытаюсь наваять простенький биндшелл на пхп. Каким образом можно перенаправить данные с STDIN/STDERR/STDOUT в сокет? На Си это делается функцией dup2(), на перле что-то типа open(STDIN, ">&SOCKET"). А на пхп?
fputs($target,data)
fwrite($target,$data)
имхо
krypt3r, http://rsdn.ru/article/inet/Advanced_PHP_Programming.xml
Ога, только что нагуглил сцылку)
Вопрос по выводу.
<?php
echo "1";sleep (5);
echo "2";sleep (5);
echo "3";sleep (5);
?>
Через 15 секунд выведет 123.Как сделать так,чтобы сначала появилась 1,потом через 5 сек - 2 ?
nc.STRIEM
29.02.2008, 15:31
средствами php - никак. Либо делать это в консольном режиме.
PHP - это интерпритируемый язык, код сначало полностью выполняеться, а потом выводиться результат.
Вопрос по выводу.
Через 15 секунд выведет 123.Как сделать так,чтобы сначала появилась 1,потом через 5 сек - 2 ?
Если это веб - то отключить буферизацию вывода.
<?php
echo "1";ob_end_flush();flush();sleep (5);
echo "2";flush();sleep (5);
echo "3";flush();sleep (5);
?>
Так не получается.Опера показывает,что загружено 2 байта.А потом через 15 сек все три цифры сразу.
Так не получается.Опера показывает,что загружено 2 байта.А потом через 15 сек все три цифры сразу.
Проверял только что телнетом - все работает.
telnet 127.0.0.1 8080
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
GET /testsleep.php HTTP/1.1
Host: ***
HTTP/1.1 200 OK
Date: Fri, 29 Feb 2008 12:08:01 GMT
Server: Apache/2.2.3 (Debian) PHP/5.2.0-8+etch10
X-Powered-By: PHP/5.2.0-8+etch10
Transfer-Encoding: chunked
Content-Type: text/html; charset=UTF-8
1
1
1
2
1
3
0
Как и предполагалось, выдает по цифре каждые 5 секунд.
Проверяйте настройки сервера и клиента - буферизацию может осуществлять каждый из них.
Noiro
средствами php - никак. Либо делать это в консольном режиме.
astrologer
29.02.2008, 21:44
<?php
echo "1<br>\n";
flush();
sleep(3);
echo "2<br>\n";
flush();
sleep(3);
echo "3<br>\n";
flush();
sleep(3);
?>
Opera => Tools => Preferences => Advanced => Browsing => Loading: Redraw Instantly
Выводит цифры с интервалом в 3 секунды.
допиши в начало скрипта ob_implicit_flush ();
работает. но не на всех хостингах.
<script>
i = 1
function reload() {
if(i == 1) {
document.getElementById('xxx').innerHTML = '1'
} else if(i == 2) {
document.getElementById('xxx').innerHTML = '2'
} else if(i == 3) {
document.getElementById('xxx').innerHTML = '3'
} else {
document.getElementById('xxx').innerHTML = ''
}
i++
setTimeout(reload, 1000)
}
</script>
<body onload="reload()"><div id="xxx"></div></body>
На ява скрипте лучше.
...
я же привел результаты теста скрипта. Про то что пхп должен сначала выполниться перед тем как что-то передавать - бред. На то оно и chunked, чтобы отдавать кусками результат.
2 NOmeR1
<script>
i = 1
function reload() {
if(i < 4) {
document.getElementById('xxx').innerHTML = i;
i++;
}
setTimeout(reload, 1000);
}
</script>
<body onload="reload()"><div id="xxx"></div></body>
Обьясните, почему в скрипте вылетает ошибка:"PHP Fatal error: Call to undefined function ImageCreateFromgif() in D:\soft\site\images\php2C7.tmp on line 2 "
Вот скрипт:
<?php
$pic = ImageCreateFromgif('logo.gif'); /* открываем
рисунок */
Header("Content-type: image/gif"); /* указываем
тип содержимого */
$color=ImageColorAllocate($pic, 255, 255, 255); /* белый
цвет */
ImageStringUp($pic,5,55,70,"Text",$color); /* выводим
надпись */
Imagegif($pic); //отображаем рисунок
ImageDestroy($pic); //закрываем рисунок
?>
Возможно, не подключена либа gd
Кроме того,
Note: GIF support was removed from the GD library in Version 1.6, and added back in Version 2.0.28. This function is not available between these versions.
Amoura, открой php.ini найди строку ;extension=php_gd2.dll и убери ; если не найдёш значит у тя её нет, поставь веб сервер по новее хотя она должна там быть
угу, еще на это внимание обрати
; Directory in which the loadable extensions (modules) reside.
extension_dir = "./"
Доброго времени суток,
появилась необходимость "убить" (виртуально) одного неправилного юзера интернета. Единственное действие, которое можно провернуть является заманивание его на определенный сайт на пхп. Предположительно что юзер юзает ie, поэтому появляется более обширный полет для фантазии :) .
Кроме стандартных айпи, порт и т.д. что можно с ним сделать через браузер?
Благодарю за внимание.
суть:
в корень домена надо положить файл определяющий рефов защедших на домен
трафик поступает на чистые хтмл странички, которые лежат в разных директориях этого домена
что слышал что можно использовать auto_prepend_file
но как х.з.
кто что подскажет?
Meanor залить ему что-нибудь через сплойт
Meanor, PHP - серверный язык, такчто ты совсем не по теме, юзеру зашедшему на твой сайт PHP никак не навредит
-Hormold-
01.03.2008, 18:46
Нужен скрипт который читает Http запросы на сервер и сохраняет...
где такой крипт взять или для написания от чего оталкиваться
inlanger
01.03.2008, 18:59
Народ, в чём прикол? На моём сайте работал RSS парсер. Работал давно и исправно. Но несколько дней назад перестал. Стал выдавать:
XML error: not well-formed (invalid token) at line 3
В скрипте 3-я строка это session_start()
Ничего не пойму. Пытался и другой RSS фид ему скормить... Нифига не помогло. Вот сайт скрипт:
<?php
header( "Content-type: text/html; charset=UTF-8" );
error_reporting(E_ALL);
require_once( "./inc/Common.inc" );
$HTML_NEWS['text'] = "";
$HEADER = "Новости";
$type = isset($_REQUEST['type']) ? $_REQUEST['type'] : "menu";
$coli4 = isset($_REQUEST['num']) ? $_REQUEST['num'] : 3;
if($coli4 > 10)
$coli4 = 10;
if ($coli4 < 1)
$coli4 = 3;
switch (strtolower($type)){
case "world": default:
$file = "http://www.profootball.com.ua/rss/news.xml";
$HEADER .= " :: Новости мирового футбола";
break;
case "russian":
$file = "http://www.championat.ru/xml/rss_football_russiapl.xml";
$HEADER .= " :: Новости Российского футбола";
break;
case "ukraine": default:
$file = "http://news.yandex.ru/football.rss";
$HEADER .= " :: Новости футбола от yandex";
break;
case "menu":
$HEADER .= "";
break;
}
$HTML_NEWS['text'] .= <<< EOS
<div class="subtitle">
<b>Новости</b><br/>
</div>
<div class="text">
На этой странице находятся самые свежие футбольные новости. <br/>
</div>
<div class="text">
EOS;
if ($type=="menu")
{
$HTML_NEWS['text'] .= "<div class=\"subtitle\">Выберите категорию новостей</div><div class=\"text\">
<a href=?type=world&num=3>Новости мирового футбола</a><br>
<a href=?type=ya&num=3>Новости футбола от yandex</a><br>
<a href=?type=russian&num=3>Новости Российского футбола</a>";
}
else
{
$rss_channel = array();
$currently_writing = "";
$main = "";
$item_counter = 0;
function startElement($parser, $name, $attrs) {
global $rss_channel, $currently_writing, $main;
switch($name) {
case "RSS":
case "RDF:RDF":
case "ITEMS":
$currently_writing = "";
break;
case "CHANNEL":
$main = "CHANNEL";
break;
case "IMAGE":
$main = "IMAGE";
$rss_channel["IMAGE"] = array();
break;
case "ITEM":
$main = "ITEMS";
break;
default:
$currently_writing = $name;
break;
}
}
function endElement($parser, $name) {
global $rss_channel, $currently_writing, $item_counter;
$currently_writing = "";
if ($name == "ITEM") {
$item_counter++;
}
}
function characterData($parser, $data) {
global $rss_channel, $currently_writing, $main, $item_counter;
if ($currently_writing != "") {
switch($main) {
case "CHANNEL":
if (isset($rss_channel[$currently_writing])) {
$rss_channel[$currently_writing] .= $data;
} else {
$rss_channel[$currently_writing] = $data;
}
break;
case "IMAGE":
if (isset($rss_channel[$main][$currently_writing])) {
$rss_channel[$main][$currently_writing] .= $data;
} else {
$rss_channel[$main][$currently_writing] = $data;
}
break;
case "ITEMS":
if (isset($rss_channel[$main][$item_counter][$currently_writing])) {
$rss_channel[$main][$item_counter][$currently_writing] .= $data;
} else {
//print ("rss_channel[$main][$item_counter][$currently_writing] = $data<br>");
$rss_channel[$main][$item_counter][$currently_writing] = $data;
}
break;
}
}
}
$xml_parser = xml_parser_create();
xml_set_element_handler($xml_parser, "startElement", "endElement");
xml_set_character_data_handler($xml_parser, "characterData");
if (!($fp = fopen($file, "r"))) {
die("could not open XML input");
}
while ($data = fread($fp, 4096)) {
if (!xml_parse($xml_parser, $data, feof($fp))) {
die(sprintf("XML error: %s at line %d",
xml_error_string(xml_get_error_code($xml_parser)),
xml_get_current_line_number($xml_parser)));
}
}
xml_parser_free($xml_parser);
if (isset($rss_channel["ITEMS"])) {
if (count($rss_channel["ITEMS"]) > 0) {
for($i = 0;$i < $coli4;$i++) {
$HTML_NEWS['text'] .= "\n<div class=\"subtitle\">" . $rss_channel["ITEMS"][$i]["TITLE"] . "</b></div>";
$HTML_NEWS['text'] .= "<div class=\"text\">" . html_entity_decode($rss_channel["ITEMS"][$i]["DESCRIPTION"]) . "</div>";
}
} else {
$HTML_NEWS['text'] .= "<b>There are no articles in this feed.</b>";
}
}
$HTML_NEWS['text'] .= <<< EOS
<div class=\"subtitle\">
<form method=get action=news.php>
EOS;
$HTML_NEWS['text'] .= "<a href=?type=$type&num=10>Больше новостей >>></a></form>";
}
бла бла бла...
2-Hormold-
http://forum.antichat.ru/showthread.php?t=43279
nlanger, XML а не PHP, PERL, MySQL, JavaScript, это не сюда
-Hormold-
01.03.2008, 20:21
$_SERVER['HTTP_headername'] - не работает.....
<?php
print_r($_SERVER);
?>
среди прочего показывает и заголовки.
мб так?
<?php
$request = '';
foreach($_SERVER as $k=>$v) {
if(strpos(strtolower($k),'http') === false) break;
$request .= "$k = $v<br>";
}
echo $request;
?>
Выведет только то, что передал браузер пользователя :)
Нужен скрипт который читает Http запросы на сервер и сохраняет...
<?php
$HEADERS = getallheaders();
$data = "[REMOTE_ADDR] = ".$_SERVER["REMOTE_ADDR"]."\r\n";
if(isset($_SERVER["HTTP_X_FORWARDED_FOR"]) != "") {
$data .= "[HTTP_X_FORWARDED_FOR] = ".$_SERVER["HTTP_X_FORWARDED_FOR"]."\r\n";
}
$data .= "[DATE] = ".date("d.m.y H:i:s")."\r\n\r\n";
foreach ($HEADERS as $name => $value) {
$data .= "[". $name. "] = ".$value."\r\n";
}
$data .= "\r\n";
if(isset($_SERVER["QUERY_STRING"]) != "") {
$data .= "[QUERY_STRING] = ".$_SERVER["QUERY_STRING"]."\r\n";
}
$data .= "################################################## ######################\r\n";
$open = fopen("./LOGZ.txt","a");
fwrite($open, $data);
fclose($open);
?>
temp_late
01.03.2008, 22:54
Как программно вывести параметр из php.ini upload_max_filesize,
нужно чтобы сработало наподобие: get_magic_quotes_gpc();
<?php
echo ini_get( 'upload_max_filesize' );
?>
symbioin
02.03.2008, 00:18
такой вопросик : у меня есть 9 симвлов (0,1,2,3,4,5,a,b,c). и нада зделать список 4 буковных "слов" из етих 9 симолов, чтобы были абсолютно все комбинации...
можно через 8 вложенных циклов... есть другие варианты?
symbioin
02.03.2008, 00:43
можешь научить?
$arr = array(0,1,2,3,4,5,a,b,c);
for($a = 0; $a < 8; $a++){
$str0 = $arr[$a];
for($b = 0; $b < 8; $b++){
$str1 = $str0.$arr[$b];
итд.... а в последнем цикле делай echo или что тебе надо.
}
}
symbioin
02.03.2008, 02:38
спасибо. теперь такой вопросик у меня есть текст : ышвгфращфзышвгарзщыфшвары шгвар . и мне нада после каждой третей буквы поставить тыре "-".
<?php
$text = "ышвгфращфзышвгарзщыфшвары шгвар";
$temp="";
while(strlen($text) > 3) {
$temp .= substr($text, 0, 3)."-";
$text = substr($text, 3);
}
echo $temp;
?>
RedBull@12
02.03.2008, 03:35
народ,я уже относительно долго сижу здесь, именно в этой теме, и в последнее время люди началаи справишать настолько элементарные вещи, что это из разряда вон выходит.
Товарищи новички, здесь лишь помогают разобраться в тонкостях программирования на PHP, не надо использовать данный форум как учебник, для этого используйте http://ru.php.net, http://php.su.
а то происходят такие ситуации что человек просит его натолкнуть тольок на мысль,в конце ему пишут код,потому что он нихера не понял и так далее. да это может быть, но не 4 раза подряд, как это делает например symbioin(не в обиду сказано). еще ОЧЕНЬ БОЛЬШАЯ РЕКОМЕНДАЦИЯ! читайте предыдущие посты, а то ответят одному человеку, и тут же следующий пост, человек задает практически такой же вопрос.
p.s.: извиняюсь за оффтоп, но действительно просто обидно за то что люди просто не хотят подумать.
temp_late
02.03.2008, 03:56
спасибо. теперь такой вопросик у меня есть текст : ышвгфращфзышвгарзщыфшвары шгвар . и мне нада после каждой третей буквы поставить тыре "-".
<?php
$text='спасибо. теперь такой вопросик у меня есть текст : ышвгфращфзышвгарзщыфшвары шгвар . и мне нада после каждой третей буквы поставить тыре "-".!!!';
$char=3;// насколько делить
$sizet=strlen($text);
$t=0;
$out='';
for ($i=0;$i<$sizet;$i++){
$t++;
if($t>$char){$t=1;$out.='-';}
$out.=$text{$i};
}
echo $out;
?>
.:EnoT:.
02.03.2008, 04:58
temp_late
а почему ты не инициализировал переменную $t в самом цикле? и $t++ туда же не засунул? =\
Специально для таких целей существует функция str_split() ,которая бьёт строку на массивы и не нужно никаких извращений!)
<?php
$text = "ышвгфращфзышвгарзщыфшвары шгвар";
$skoka = 3; //По сколько символов разбивать
$arr = str_split($text, $skoka);
for($i=0; $i < count($arr); $i++)
{
$str = $arr[$i]."-";
echo $str;
}
?>
spamoney
02.03.2008, 06:56
Всем привет, у меня такой вопрос:
есть два sql запроса:
$sql1= SELECT min(count) FROM table1;
$sql2= SELECT min(id) FROM table1 WHERE count=$sql1;
Можно ли как-нибудь объединить это в один SQL запрос, пробывал так, но естественно не работает:
$sql=SELECT min(id) FROM table1 WHERE count=min(count);
я не очень понимаю зачем тут min(id) ведь если напимер min(count) - равен 10 то и выбора нет..значение id там только одно
попробуй так
$sql=SELECT min(id) FROM table1 WHERE count=(SELECT min(count) FROM table1);
presidentua
02.03.2008, 09:54
Возникла такая задачка.
На функцию передается переменная. А как в этой функции вывести названия переменной что ей передается, именно имя а не значение?
presidentua, ого, норкоман... ИМХО никак не сделать я вот погуглил не нащёл, да и неслышал о таком Х_Х
presidentua
02.03.2008, 11:09
presidentua, ого, норкоман... ИМХО никак не сделать я вот погуглил не нащёл, да и неслышал о таком Х_Х
не наркоман, я на службе :)
Ну в принципе это мне сдуру придумалось такое. Тоже в гугле ничего не нашел. Но как говориться, я тоже ежика не вижу, а он есть :)
Мож кто знает как решить?
spamoney
02.03.2008, 11:24
я не очень понимаю зачем тут min(id) ведь если напимер min(count) - равен 10 то и выбора нет..значение id там только одно
смотри допистим в таблице такие значения:
id count
1 5
2 6
3 4
4 4
запрос $sql1= SELECT min(count) FROM table1; вернет их так
id count
3 4
4 4
приведенный твой запрос, если даже он и прокатит делает два запоса в БД, а нужен один
так всё таки возможно ли объединить эти два запроса в один:
$sql1= SELECT min(count) FROM table1;
$sql2= SELECT min(id) FROM table1 WHERE count=$sql1;
SELECT min(id) FROM table1 WHERE count=(SELECT min(count) FROM table1);
spamoney
02.03.2008, 12:04
Мммм, видимо, я немного непонятно объяснил, нужно использовать как можно меньше обращений к БД, запрос:
SELECT min(id) FROM table1 WHERE count=(SELECT min(count) FROM table1);
также как и:
$sql1= SELECT min(count) FROM table1;
$sql2= SELECT min(id) FROM table1 WHERE count=$sql1;
используют два обращения к БД, а нужно оптимизировать так что бы было одно...
Возникла такая задачка.
На функцию передается переменная. А как в этой функции вывести названия переменной что ей передается, именно имя а не значение?
По моему лучше сделать переменную - ключём массива.
<?php
$test['KEY_OF_ARRAY'] = 'VALUE_OF_ARRAY';
function var_get($arr) {
$key = array_keys($arr);
echo($key[0]);
}
var_get($test); //return 'KEY_OF_ARRAY'
?>
presidentua
02.03.2008, 13:08
Спасибо NOmeR1!
Так и сделаю. Думаю по другому никак..
--------------------------------
Сейчас запустил один скриптик для парсинга ГУГЛ страниц и мне периодически выбрасывает ошибку
Error in my_thread_global_end()
Что это вобще за ошибка. Я такую фукнуцию не юзаю и в глаза не видел
как можно грамотно проверить введённый логин юзера на наличие недопустимых символов в php?
на ум приходит тока выдернуть регуляркой по паттерну, содержащему тока буквы и цифры, и если выдранный кусок не совпадает с полным логином - тогда фальс.
но штото подсказывает мне, что это изврат.
а также хотелось бы это проверить и на javascript :)
if(!ereg('^[a-zA-Z0-9_]+$',$login)){die('Неверное имя!');}
George767
02.03.2008, 14:03
а также хотелось бы это проверить и на javascript :)
делать проверку на клиентской стороне - лишняя трата времени
astrologer
02.03.2008, 14:45
делать проверку на клиентской стороне - лишняя трата времени
Неверно, делать предварительную проверку на клиетской стороне - как раз экономия серверного времени. Но это в тему по JS.
спасибо. по js я уже нашёл код, буду разбираться.
если кому надо -
var iChars = "!@#$%^&*()+=-[]\\\';,./{}|\":<>?";
for (var i = 0; i < document.formname.fieldname.value.length; i++) {
if (iChars.indexOf(document.formname.fieldname.value. charAt(i)) != -1) {
alert ("Your username has special characters. \nThese are not allowed.\n Please remove them and try again.");
return false;
}
}
суть:
в корень домена надо положить файл определяющий рефов защедших на домен
трафик поступает на чистые хтмл странички, которые лежат в разных директориях этого домена
что слышал что можно использовать auto_prepend_file
но как х.з.
кто что подскажет?
up
up
имхо с html такое невозможно. только если через логи сервера...
например, ложим хтаксесс в корень
понятно что все достыпы походятчерез него, если взять прметивный пример, это защита от хотлинка
родилась мысль, можно ли используя хтаксесс одать параллельно файлу обработчику на пхп
temp_late
02.03.2008, 17:40
temp_late
а почему ты не инициализировал переменную $t в самом цикле? и $t++ туда же не засунул? =\
Есть предположение, что на подсчет длины через функцию на каждом цикле будет тратиться больше ресурсов, чем если подсчитать однажды и просто цеплять результат уже из переменной, если мое мнение ошибочно поправьте меня.
Насчет $t++, согласен есть такое, можно, привычка.. вот научили на Pascale так делать. А что будет быстрее если сделать так?:
<?php
$text='! ышвгфращфзышвгарзщыфшвары шгвар!!!';
$char=3;// насколько делить
$sizet=strlen($text);
$t=1;
$out='';
for ($i=0;$i<$sizet;$i++,$t++){
if($t>$char){$t=1;$out.='-';}
$out.=$text{$i};
}
echo $out;
?>
Специально для таких целей существует функция str_split() ,которая бьёт строку на массивы и не нужно никаких извращений!)
<?php
$text = "ышвгфращфзышвгарзщыфшвары шгва";
$skoka = 3; //По сколько символов разбивать
$arr = str_split($text, $skoka);
for($i=0; $i < count($arr); $i++)
{
$str = $arr[$i]."-";
echo $str;
}
?>
В твоем коде логическая ошибка, функция str_split() кромсает строку в масив по 3 символа, и потом собирает масив в едино, прибавляя в конце '-'.
Ошибка в том что строка не всегда может делиться на три ровно, а тире по заданию нужно поставить через каждые 3 символа,
$text='1234567';
так будет выполнять твой код
123-
456-
7-
последние тире поставилось не через 3 символов, для этого нужно внести следующее условие в твой код:
<?php
$text = "ышвгфращфзышвгарзщыфшвары шгва";
$skoka = 3; //По сколько символов разбивать
$arr = str_split($text, $skoka);
for($i=0; $i < count($arr); $i++)
{
if (strlen($arr[$i])==3){$str = $arr[$i]."-";}
else{$str = $arr[$i];}
echo $str;
}
?>
тогда будет правильно, но мне кажется мой код будет проще, и рациональней использовать системные ресусры.
PS:Правильней было бы присвоить текст используя одинарный ковычки:
$text = 'ышвга';
//а так :
$text = "ышвга"; //он будет тратить больше ресурсов, ибо будет искать в текст переменные для их замены.
.:EnoT:.
02.03.2008, 18:12
в чём-то соглашусь с тобой, в чём то нет)
Логической ошибки там нет, т.к. функция режет строку на равные части по 3 символа) Для этого она и существует)) И если уж говорить о ресурсоёмкости (что в данном примере в принципе смешно), то мой код менее извращённый и в цикле не содержится лишних переменных (которые ты объявил я сам не знаю зачем). С твоей доработкой кода согласен, если автору нужно чтобы только после каждого 3-го символа ставилось тире, то ты да.
Насчёт двойных кавычек ... хехе, выразился конечно так....в таких ничтожных скриптах это не суть важно....а в серьёзных проектах...согласен одинарную кавычку использовать рациональней :)
и вообще
<?php
echo implode('-', str_split('ышвгфращфзышвгарзщы шварышгва', 3));
?>
VADIK-XXX
02.03.2008, 21:58
Вот такая ситуация. Нужно сделать так:
Если например есть кукис cook_lang:ru в браузере то оставить все как есть ничто не трогать а если их нету то перенаправить на страницу выбора языка например Lang.php
Подскажите пожалуйста как так сделать можно
VADIK-XXX,
<?php
if(!$_COOKIE['cook_lang']) {
header('Location: Lang.php');
exit();
}
?>
Вставь вначало.
if(!isset($_COOKIE['cook_lang']) || $_COOKIE['cook_lang'] != 'ru') {
header('Location: lang.php');
}
VADIK-XXX
02.03.2008, 22:16
Спасибо ребят все получилось Вам +1
Такой вопрос...если я проверяю залогинен ли юзер по сессии возможно ли обойти проверку?
Такой вопрос...если я проверяю залогинен ли юзер по сессии возможно ли обойти проверку?
Всё возможно.В куки храниться индетификатор сессии,если где-то взять индетификатор с залогиненой сессией и подставить его в куки то проверка будет пройдена.
Doom123, не слушай дядю, обойти невозможно
scrat, он спрашивает возможно-ли как-то изменить значения в сессии хэкерским путём :)
inlanger
04.03.2008, 01:47
Подскажите, пожалуйста...
Есть сайт, который доступен только определённому количеству IP.
Мне надо получить эту страницу(я могу на неё заходить) и выколупать из неё все ссылки. file_get_contents не катит, так как к сайту обращаюсь не я, а сервер. Как выколупать ссылки и прочее у меня получается, а вот как получить эту страницу в своё распоряжение, кроме как file_get_contents, не придумал.
file_get_contents не катит, так как к сайту обращаюсь не я, а сервер
А какая разница?
Расскажите плз как работает бан по ип при бруте юзера в булке? типо как записать ип и всё такое я знаю, а как его удалить через 5мин например?
Расскажите плз как работает бан по ип при бруте юзера в булке?
Наверное также как и везде, блокирует содержимое если ИП соответсвует одному из списка забаненых...
а как его удалить через 5мин например?
В списке забаненых должно быть время во сколько забанили, потом если он опять прихдит сверять разницу в 5минут, если настоящее время больше 5 минут от забаненого, то пройтись по файлу(если список забаненых нах. в файле) либо Sql запросом удалить строку, где забаненый ИП == Remote_addr (:d).
Впринципе ничего сложного
inlanger
04.03.2008, 11:29
А какая разница?
Как какая? Я же написал - тогда к серверу обращаюсь не я, со своим IP, а мой сервер, где скрипт лежит. А сервер мой не на моей тачке. А обычный хостинг в инете...
Ставь денвер и не мучайся =\
Это сервер будет твоя тачка и ты можешь и файл_гет_контентс и инклуд и сокеты короче все што хочеш
inlanger
04.03.2008, 12:20
Как раз только что это и понял :)
Но вот другие люди не смогут же скриптом пользоваться? А я не только для себя пишу...
Horsekiller
04.03.2008, 12:36
Как раз только что это и понял :)
Но вот другие люди не смогут же скриптом пользоваться? А я не только для себя пишу...
Другие люди тоже ставят себе денвер и пользуются ;)
inlanger, ищи бесплатный хочтинг где разрешены сокеты или покупай хостинг и все смогут пользоваться
inlanger
04.03.2008, 13:20
Я же писал, что тогда старницу будет брать сервер хостера! А его Ip нет в списке разрешённых!
GreenBear
04.03.2008, 13:40
http://ru2.php.net/sockets
Cecil B Demented
04.03.2008, 13:41
Такой вопрос можно ли на php шифровать строку/данные испоьльзуя XOR, но не с простым смещением, а как это было сделано в XOR Encryption4 (http://www.sparkssoft.com/jscript/Cryptography/xor_encryption4.html) (javascript) используя ключь?
Пробывал перебить код на php но чёт выдаёт не те значения что на js.
2inlanger
Будет здоровски если у тебя постоянный IP можешь поднять веб сервер и поставить себе прокси сервер, люди будут через тебя юзать тот скрипт, у которого твой ип разрешен.
Т.е. пишеш скрипт на сокетах, который подключаеться к тебе как к прокси и гуляет по тому скрипту...
Надеюсь понял =)
Насчет XOR.
Неверное енкрипция это баг в 4 линии PHP
в 5 помойму исправлено
inlanger
04.03.2008, 15:34
Надеюсь понял =)
это извращние :)
но буду пробовать...
Такой вопрос можно ли на php шифровать строку/данные испоьльзуя XOR, но не с простым смещением, а как это было сделано в XOR Encryption4 (javascript) используя ключь?
Пробывал перебить код на php но чёт выдаёт не те значения что на js.
Отладка показала, что javascript-версия работает с длинными целыми, типа 1129711511511911111410070113366, что выходит за пределы целых чисел в пхп. На пхп надо или переписать алгоритм шифрования, или гуглить по поводу юзания в пхп длинных целых (long integer)
Кто поможет и обяснит дам 7знак icq
как можно писать на картинке в php и можно ли вообще?
желательно примерчег!
мне надо чтобы на рисунке выводилось введеное слово которое ввели в поле ввода!
Кто поможет и обяснит дам 7знак icq
как можно писать на картинке в php и можно ли вообще?
желательно примерчег!
мне надо чтобы на рисунке выводилось введеное слово которое ввели в поле ввода!
можно.
$img = imagecreatefromgif("img.gif");
$white = imageColorAllocate($img, 230, 230, 230);
imagestring($img, 2, 3, 65, "TEXT", $white);
imageGIF($img);
ImageDestroy($img);
примерно так.
.:EnoT:.
04.03.2008, 20:41
rasl, Точь в точь под твои потребности))
<?php
function img_nalogenie(&$im, $img_info, $imgtxt)
{
if ($img_info[0]>50 and $img_info[1]>20) /* проверка, влезит ли надпись */
{
$green = imagecolorallocate ($im, 0, 255, 0); // установка зеленого цвета
imagestring($im, /* наше изображение */
2, /* id шрифта (0-5 - системные), остальные грузятся через imageloadfont() */
50, /* смещение по X */
5, /* смещение по Y */
$imgtxt, $green); /* цвет выводимого текста */
}
}
if(isset($_POST['imgtxt']))
{
$img_name = "http://forum.antichat.ru/antichat/pic/logo.gif"; /* Адрес картинки*/
$imgtxt = $_POST['imgtxt'];
$info = @getimagesize($img_name); /* получение информации о изображении */
$ext = @$info[2]; /* тип изображения */
$header = @$info['mime']; /* правильный заголовок для использования в header() */
switch($ext) /* выбор способа открытия по типу изображения */
{
case 1: // GIF
{
$im = @imagecreatefromgif($img_name); /* попытка открыть */
if ($im) /* Открылось или нет */
{
header("Content-type: " . $header); /* отправляем заголовок */
img_nalogenie($im, $info, $imgtxt); /* накладываем свой текст на изображение */
imagegif($im); /* выводим изображение в браузер */
}
break;
}
case 2: // JPG
{
$im = @imagecreatefromjpeg($img_name);
if ($im)
{
header("Content-type: " . $header);
img_nalogenie($im, $info, $imgtxt);
imagejpeg($im);
}
break;
}
case 3: // PNG
{
$im = @imagecreatefrompng($img_name);
if ($im)
{
header("Content-type: " . $header);
img_nalogenie($im, $info);
imagepng($im);
}
break;
}
case 6: // BMP
{
$im = @imagecreatefromwbmp($img_name);
if ($im)
{
header("Content-type: " . $header);
img_nalogenie($im, $info, $imgtxt);
imagewbmp($im);
}
break;
}
default: /* если ничего не подошло */
{
$f = @file($img_name); /* пробуем считать файл */
if ($f) /* если файл считался */
{
echo implode("", $f); /* выводим массив строкой */
}
break;
}
}
}
?>
<form action method="post">
<input name="imgtxt" type="text" />
<input type="submit" value="Поехали" />
</form>
Пример работы тут (http://muver.org/imgtxt.php)
пысы асько не надо
Вот решил написать скрипт который загружает фалы из интернэта к себе на фтп но почемуто файлы получаются битые .обьясните пожайлуста.
<?php
$hostname = "imgl.yandex.net";
$path = "/i/www/logo.png";
$otvet = "";
$fp = fsockopen($hostname, 80, $errno, $errstr, 30);
$data = "\r\n\r\n";
$headers = "POST $path HTTP/1.1\r\n";
$headers .= "Host: $hostname\r\n";
$headers .= "Content-type: application/x-www-form-urlencoded\r\n";
$headers .= "Content-Length: ".strlen($data)."\r\n\r\n";
fwrite($fp, $headers.$data);
while (!feof($fp))
{
$otvet .= fgets($fp, 1024);
}
fclose($fp);
$massiv_otveta=explode("\n",$otvet);
$nachalo_ishodnica = array_search('', $massiv_otveta)-3;
$konec_ishodnica = count($massiv_otveta);
$filename = 'negri.png';
$handle = fopen($filename, 'x');
for ($i=$nachalo_ishodnica;$i<=$konec_ishodnica;$i++) {
fwrite($handle, $massiv_otveta[$i]);
}
fclose($handle);
?>
ZET36,
<?php
$data = "\r\n\r\n";
$headers .= "Content-Length: ".strlen($data)."\r\n\r\n";
?>
Может в $data должно быть пусто? =\
Isis хых непомогает, блин я конкретно ступил со скриптом всё можно сделать проще. но всёравно файл битый
<?php
$inetfile = fopen("http://imgl.yandex.net/i/www/logo.png", "r");
$copyfyle = fopen("logo.png", 'x');
while (!feof($inetfile)) {
$file = fgets($inetfile, 4096);
fwrite($copyfyle, $file);
fclose($copyfyle);
}
fclose($inetfile);
?>
мне кажется это происходит из за режимов для fopen()
(x) а какие есть ещё режимы для записи файлов?
$data - это строка с запросом (var1=...&var2=...)
Вот исправления.
Строка 10 (на твоё усмотрение)
$data = "var1=...&var2=...";
Строка 17
fwrite($fp, $headers);
Твой код можно упростить во много раз, если воспользоваться file_get_contents(), т.к. у тебя там использоваться должен метод не POST, а GET.
<?php
// {
$file_to_download = 'http://imgl.yandex.net/i/www/logo.png';
$filename = 'negri.png';
// }
$f_got = file_get_contents($file_to_download);
$fopen = fopen($filename, 'w');
fwrite($fopen, $f_got);
fclose($fopen);
?>
P.S. Права на файл negri.png или папку со скриптом должны быть 0777.
NOmeR1 огромное спасибо. всё работает
Помогите плз я написал скрипт...у меня он работает.. а у чела которому он нужен не пашет вот скрипт
функция mysql_qw()
<?php ## Простейшая функция для работы с placeholder-ами.
// result-set mysql_qw($connection_id, $query, $arg1, $arg2, ...)
// - или -
// result-set mysql_qw($query, $arg1, $arg2, ...)
// Функция выполняет запрос к MySQL через соединение, заданное как
// $connection_id (если не указано, то через последнее открытое).
// Параметр $query может содержать подстановочные знаки ?,
// вместо которых будут подставлены соответствующие значения
// аргументов $arg1, $arg2 и т.д. (по порядку), экранированные и
// заключенные в апострофы.
function mysql_qw()
{
// Получаем все аргументы функции.
$args = func_get_args();
// Если первый параметр имеет тип "ресурс", то это ID соединения.
$conn = null;
if (is_resource($args[0]))
$conn = array_shift($args);
// Формируем запрос по шаблону.
$query = call_user_func_array("mysql_make_qw", $args);
// Вызываем SQL-функцию.
return $conn !== null ? mysql_query($query, $conn) : mysql_query($query);
}
// string mysql_make_qw($query, $arg1, $arg2, ...)
// Данная функция формирует SQL-запрос по шаблону $query,
// содержащему placeholder-ы.
function mysql_make_qw()
{
$args = func_get_args();
// Получаем в $tmpl ССЫЛКУ на шаблон запроса.
$tmpl = &$args[0];
$tmpl = str_replace("%", "%%", $tmpl);
$tmpl = str_replace("?", "%s", $tmpl);
// После этого $args[0] также окажется измененным.
// Теперь экранируем все аргументы, кроме первого.
foreach ($args as $i => $v)
{
if (!$i)
continue; // это шаблон
if (is_int($v))
continue; // целые числа не нужно экранировать
$args[$i] = "'" . mysql_escape_string($v) . "'";
}
// На всякий случай запорняем 20 последних аргументов недопустимыми
// значениями, чтобы в случае, если число "?" превышает количество
// параметров, выдавалась ошибка SQL-запроса (поможет при отладке).
for ($i = $c = count($args) - 1; $i < $c + 20; $i++)
$args[$i + 1] = "UNKNOWN_PLACEHOLDER_$i";
// Формируем SQL-запрос.
return call_user_func_array("sprintf", $args);
}
?>
Часть кода которая не работает:
$result = mysql_qw('SELECT * FROM items WHERE owner_id=? AND item_id=?', $char_id,4037) or die(mysql_error());
for ($red = array(); $row2 = mysql_fetch_array($result); $red[] = $row2);
if ($red == array())
{
$result = mysql_qw('SELECT MAX(object_id)+1 AS id FROM items');
$row = mysql_fetch_assoc($result);
$ins_id = $row['id'];
mysql_qw('INSERT INTO items SET owner_id=?, object_id=?, item_id=?, count=?', $char_id, $ins_id, 4037, $FAs_for_vote) or die(mysql_error());
} else {
mysql_qw('UPDATE items SET count=count+? WHERE owner_id=? AND item_id =?', $FAs_for_vote,
$char_id, 4037) or die(mysql_error());}
эта часть скрипта проверяет есть чи у чара этот предмет если да то добовляет +1 к количеству а если нет то просто создаёт его у чара....
но проблема в том что скрипт работает у меня нормально а у другова он просто создаёт всегда этот предмет заного даже если он существовал
RedBull@12
07.03.2008, 01:00
а у вас БД одинаковые?
у меня mysql 5.0 у него 5.1
RedBull@12
07.03.2008, 01:07
а у вас БД одинаковые?
скорее всего у тебя БД более старой версии, а парнишки более новая версия.
если так то может и БД ругаться на запросы, елси мускул, то в новых версиях обязательны кавычки, как
SELECT * FROM `test` WHERE id="1"
я пытался и с помощью ковычек исправить не вышло( да и темболее там соит
or die(mysql_error()) что вывело бы ошибку в синтаксисе
RedBull@12
07.03.2008, 01:17
я пытался и с помощью ковычек исправить не вышло( да и темболее там соит
or die(mysql_error()) что вывело бы ошибку в синтаксисе
у меня была похожая ситуация, но у меня БД ошибку из-за этого не выдавало, а выдавало пустой результат, именно пустой. И прерывание не срабатывало.
тогда я всётаки попробую функцией mysql_query а не своей)
$result = mysql_qw("SELECT * FROM `items` WHERE `owner_id`='?' AND `item_id`='?' ", ... );
Пиши с апострофами... Мб поможет ^^
Не рекомендуется использовать запросы без оператора WHERE, т.к. с некоторыми базами бывают проблемы:
Т.е. бывают случаи, когда запрос вида
SELECT * FROM `tableName`
возвращает пустой результат.
Лечится добавлением "WHERE 1" в крнец запроса:
SELECT * FROM `tableName` WHERE 1
У тебя в коде такой запрос видел, хотя это, наверное, не корень проблемы.
А вообще пройдись дебагом по скрипту у самого заказчика. print_r тебе в помощь
Как сделать вывод на сайт аторизации в ipb а потом на том же сайте вывести аву юзера и последнее его сообщение?
.:EnoT:.
07.03.2008, 20:41
блин, спросил бы ты для smf или phpbb я бы тебе рассказал...а вот для ипб не знаю....ну в теории такая интеграция делается так. Берёшь форму авторизации форума, копируешь на сайт свой ну и путь к обработчику меняешь на правильный. аву...просто смотришь как авы в бд храняться и делаешь скуль-запрос и выводишь....только при интеграциях очень важно с куками разобраться, что будет не очень просто, самая жопа если у тебя форум висит на поддомене..в общем это в теории :)
лан спасибо я уже вроде как придумал ... ток хз в какой таблицы хранится авик
Блок авторизации для форума IPB
Как установить:
-Создаем в директории block файл b-Login.php со следующим содержанием:
<?php
if (!defined("DNREAD")) exit();
global $setting,$tm,$db,$basepref,$usermain;
$block_cont = "";
if($usermain['logged']==1 && $usermain['uname']!="") {
$block_cont.= "<form action=\"forum/index.php?act=Login&CODE=03&k=\" method=\"post\" target=\"_top\"><input type=\"hidden\" name=\"CookieDate\" value=\"1\">
\n";
$block_cont.= "<table width=\"125\" cellpadding=\"4\" cellspacing=\"1\" border=\"0\" align=\"center\">\n";
$block_cont.= "<tr>\n";
$block_cont.= "<td class=\"row1\" align=\"center\">\n";
$block_cont.= "<p align=\"center\">Добро пожаловать!<hr><p align=\"center\"><img border=\"0\" src=\"forum/style_avatars/".$usermain['avatar']."\"></p>\n Уважаемый <b>".$usermain['uname']."</b>!<br/><br>\n";
$block_cont.= "</td>\n";
$block_cont.= "</tr>\n";
$block_cont.= "</table>\n";
$block_cont.= "</form>\n";
return $block_cont;
}
else {
$block_cont.= "<table width=\"125\" cellpadding=\"4\" cellspacing=\"1\" border=\"0\" align=\"center\">\n";
$block_cont.= "<tr>\n";
$block_cont.= "<td class=\"row1\" align=\"center\">\n";
$block_cont.= "<p align=\"center\">Добро пожаловать!<hr/>Уважаемый <b>Гость</b>!<br/><br/>\n";
$block_cont.= "Для полноценного просмотра сайта, авторизируйтесь: <hr></td>\n";
$block_cont.= "</tr>\n";
$block_cont.= "</table>\n";
$block_cont.= "<form action=\"forum/index.php?act=Login&CODE=01\" method=\"post\">\n";
$block_cont.= "<table width=\"125\" cellpadding=\"4\" cellspacing=\"1\" border=\"0\" align=\"center\">\n";
$block_cont.= "<tr>\n";
$block_cont.= "<td class=\"row1\">\n";
$block_cont.= "<table border=\"0\" cellpadding=\"3\" cellspacing=\"1\" width=\"100%\">\n";
$block_cont.= "<tr>\n";
$block_cont.= "<td colspan=\"2\" align=\"center\">\n";
$block_cont.= "</td>\n";
$block_cont.= "</tr>\n";
$block_cont.= "<tr>\n";
$block_cont.= "<td width=\"125\" align=\"right\">\n";
$block_cont.= "<span class=\"sub3\">Логин:</span>\n";
$block_cont.= "</td>\n";
$block_cont.= "<td>\n";
$block_cont.= "<input type=\"text\" name=\"UserName\" class=\"post\" size=\"10\" maxlength=\"40\" value=\"\">\n";
$block_cont.= "</td>\n";
$block_cont.= "</tr>\n";
$block_cont.= "<tr>\n";
$block_cont.= "<td align=\"right\" width=\"125\">\n";
$block_cont.= "<span class=\"sub3\">Пароль:</span>\n";
$block_cont.= "</td>\n";
$block_cont.= "<td>\n";
$block_cont.= "<input type=\"password\" class=\"post\" name=\"PassWord\" size=\"10\" maxlength=\"32\">\n";
$block_cont.= "</td>\n";
$block_cont.= "</tr>\n";
$block_cont.= "<tr align=\"center\">\n";
$block_cont.= "<td colspan=\"2\">\n";
$block_cont.= "<input type=\"hidden\" name=\"CookieDate\" value=\"1\">
<input onmouseover=\"this.className='rerbutton';\" onmouseout=\"this.className='rbutton';\" class=\"rbutton\" value=\" Войти \" type=\"submit\">\n";
$block_cont.= "\n";
$block_cont.= "</td>\n";
$block_cont.= "</tr>\n";
$block_cont.= "<tr align=\"center\">\n";
$block_cont.= "<td colspan=\"2\">\n";
$block_cont.= "<span class=\"smalllink\"><a href=\"forum/index.php?act=Reg&CODE=10\" class=\"sub3\"><hr> Забыли пароль?</a></span>\n";
$block_cont.= "</td>\n";
$block_cont.= "</tr>\n";
$block_cont.= "</table>\n";
$block_cont.= "</td>\n";
$block_cont.= "</tr>\n";
$block_cont.= "</table>\n";
$block_cont.= "<table width=\"125\" cellpadding=\"4\" cellspacing=\"1\" border=\"0\" class=\"forumline\" align=\"center\" id=\"table1\">\n";
$block_cont.= "<tr>\n";
$block_cont.= "<th height=\"25\" class=\"smalllink\" nowrap=\"nowrap\">\n";
$block_cont.= "<a class=\"sub3\" href=\"forum/index.php?act=Reg&CODE=00\">Новая\n";
$block_cont.= "регистрация</a><hr></th>\n";
$block_cont.= "</tr>\n";
$block_cont.= "</table>\n";
$block_cont.= "</form>\n";
}
return $block_cont;
?>
Затем файл base/userbase/user.ipb.php заменить этим:
## WWW : www.danneo.com | www.danneo.org ##
## E-MAIL : help@danneo.com ##
## ================================================== == */
if(!defined("DNREAD")) exit();
// Тестировалось на Invision Power Board v2.1.4 - 2.1.6
// UNSET IPB & NEW ARRAY
unset($ipb); $ipb = array();
###################################
# Форум фреймворкс #
###################################
$ipb['dbname'] = 'tbl_old'; // НАЗВАНИЕ БАЗЫ
$ipb['dbpref'] = 'ibf_'; // ПРЕФИКС БАЗЫ
$ipb['lastact'] = 7200; // ВРЕМЯ АКТИВНОСТИ СЕССИИ
$ipb['cookie'] = ''; // ПРЕФИКС КУКИ
###################################
# USER FORM #
###################################
define('FORUMFORM','ipb.form');
// FORUM BASE
$db->select($ipb['dbname'],0);
// FORUM BASE
// APANEL TEST ?
if(defined("DNTEST")){ return $connet = $db->works; }
// APANEL TEST ?
// THIS WORKS ?
if($db->works==1){
// TOTAL
$ipb['time'] = NEWTIME;
$ipb['agent'] = substr($_SERVER['HTTP_USER_AGENT'],0,200);
$ipb['ip'] = substr($_SERVER['REMOTE_ADDR'],0,16);
$ipb['sessid'] = isset($_COOKIE[$ipb['cookie'].'session_id']) ? $_COOKIE[$ipb['cookie'].'session_id'] : '';
$ipb['passhash'] = isset($_COOKIE[$ipb['cookie'].'pass_hash']) ? $_COOKIE[$ipb['cookie'].'pass_hash'] : '';
// TEST
if(!empty($ipb['sessid'])){
$ipbsess = $db->fetchrow($db->query("SELECT * FROM ".$ipb['dbpref']."sessions WHERE id='".addslashes($ipb['sessid'])."'
AND running_time > ".($ipb['time'] - $ipb['lastact'])." AND browser='".addslashes($ipb['agent'])."'"));
} else {
$ipbsess['member_id']=0;
}
// NORMAL
if(!empty($ipb['sessid']) && !empty($ipb['passhash']) && $ipbsess['member_id'] > 0){
// USER
$ipbuser = $db->fetchrow($db->query("SELECT id,name,email,member_login_key
FROM ".$ipb['dbpref']."members WHERE id ='".$ipbsess['member_id']."'"));
$ipphoto = $db->fetchrow($db->query("SELECT avatar_location
FROM ".$ipb['dbpref']."member_extra WHERE id ='".$ipbsess['member_id']."'"));
// ISSET
if($ipbuser['id'] && $ipbuser['name'] && $ipbuser['email'] && $ipbuser['member_login_key']==$ipb['passhash']){
// UPDATE
$db->query("UPDATE ".$ipb['dbpref']."sessions SET browser='".addslashes($ipb['agent'])."',running_time='".$ipb['time']."'
WHERE id = '".addslashes($ipbsess['member_id'])."'");
// DATA
$usermain = array('logged'=>1,
'userid'=>$ipbuser['id'],
'uname'=>$ipbuser['name'],
'umail'=>$ipbuser['email'],
'avatar'=>$ipphoto['avatar_location'],
'regdate'=>'',
'lastvisit'=>'',
'icq'=>'',
'msn'=>'',
'www'=>'',
'blocked'=>'');
// DATA
}
// ISSET
}
// NORMAL
// THIS WORKS ?
}
// RETURN CMS BASE
$db->select($namebase,1);
// RETURN CMS BASE
// UNSET IPB
unset($ipb);
?>
Вывод последних тем с форума IPB
<?php
if(!defined("DNREAD")) exit();
//************************************************** ******************************
// БЛОК ВЫВОДА ПОСЛЕДНИХ СООБЩЕНИЙ С ФОРУМА
// INVISION POWER BOARD 2.0.x , 2.1.x
// Разработка oleg_matasov
//
// admin@tbilisskaya.com
//************************************************** ******************************
//======[ОСНОВНЫЕ НАСТРОЙКИ]======
//Префикс таблицы с IPB
$prefix = 'ibf';
//Сколько тем выводить
$num = 10;
//Сколько символов оставить в названии темы после урезания
$topic_num_sym = 40;
//Имя папки с картинками текущего скина
$img_path = '1';
//Формат времени
$time = 'd.m H:i';
//Форумы, которые мы не трогаем
$forumexclude = '11,21';
//Сервер БД на котором висит база форума
$host="localhost";
//Имя БД
$database="tbl_old";
//Логин БД
$username="root";
//Пароль БД
$password="";
//====[Если не знаем PHP - дальше ничего не трогаем :)]=========
$ipb_db = mysql_pconnect($host, $username, $password) or trigger_error(mysql_error(), E_USER_ERROR);
mysql_select_db($database, $ipb_db);
$bt = "<table width=\"100%\" border=\"0\" cellpadding=\"2\" cellspacing=\"1\" bgcolor=\"#dee2e5\">";
$bt.= "<th width=\"60%\" height=\"26\" align=\"center\"><font class=\"storytitle\">Название темы</font></th>";
$bt.= "<th width=\"10%\" height=\"26\" align=\"center\"><font class=\"storytitle\"><b>Автор</b></font></th>";
$bt.= "<th width=\"5%\" height=\"26\" align=\"center\"><font class=\"storytitle\">Ответов</font></th>";
$bt.= "<th width=\"5%\" height=\"26\" align=\"center\"><font class=\"storytitle\">Просмотров</font></th>";
$bt.= "<th width=\"20%\" height=\"26\" align=\"center\" colspan=\"2\"><font class=\"storytitle\"><b>Последний ответ</b></font></th>";
$resultf = mysql_query("SELECT tid, title, description, state, posts, starter_id, last_poster_id, last_post, icon_id, starter_name, last_poster_name, views, topic_hasattach FROM ".$prefix."_topics WHERE (forum_id NOT IN ($forumexclude)) ORDER BY last_post DESC LIMIT $num",$ipb_db) or die(mysql_error());
$row_resultf = mysql_fetch_assoc($resultf);
$totalRows_resultf = mysql_num_rows($resultf);
do {
$topicstrip = $row_resultf['title'];
if (strlen($topicstrip) > $topic_num_sym) {
$topicstrip = substr($topicstrip,0,$topic_num_sym);
$topicstrip = $topicstrip."...";
}
$status = ($row_resultf['state'] == "closed") ? "<img src=\"forum/style_images/$img_path/f_closed.gif\" border=\"0\" alt=\"Тема закрыта\">" : "";
$attach = ($row_resultf['topic_hasattach'] == "1") ? "<img src=\"temp/A-Vector/images/files.gif\" border=\"0\" alt=\"В сообщении есть прикрепленные файлы\"> " : "";
$icon = ($row_resultf['icon_id'] == "0") ? " <img border=\"0\" src=\"temp/Default/images/icon.gif\"> " : "<img src=\"forum/style_images/$img_path/folder_post_icons/icon$icon_id.gif\" border=\"0\" alt=\"Иконка сообщения\"> ";
$last_date = date($time,$row_resultf['last_post']);
$bt.= "<tr>";
$bt.= "<td bgcolor=\"#FFFFFF\">";
$bt.= "<table width=\"100%\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" bgcolor=\"#FFFFFF\"><tr>";
$bt.= "<td>$icon</td>";
$bt.= "<td width=\"100%\"><a title=\"".$row_resultf['description']."\" href=\"forum/index.php?showtopic=".$row_resultf['tid']."&view=getlastpost\">$topicstrip</a></td>";
$bt.= "<td align=\"center\" valign=\"middle\">$attach</td>";
$bt.= "<td align=\"center\" valign=\"middle\">$status</td>";
$bt.= "</tr></table></td>";
$bt.= "<td bgcolor=\"#FFFFFF\" align=\"center\"><a href=\"forum/index.php?showuser=".$row_resultf['starter_id']."\">".$row_resultf['starter_name']."</a></td>";
$bt.= "<td bgcolor=\"#FFFFFF\" align=\"center\">".$row_resultf['posts']."</td>";
$bt.= "<td bgcolor=\"#FFFFFF\" align=\"center\">".$row_resultf['views']."</td>";
$bt.= "<td bgcolor=\"#FFFFFF\" align=\"center\">$last_date</td>";
$bt.= "<td bgcolor=\"#FFFFFF\" align=\"center\"><a href=\"forum/index.php?showuser=".$row_resultf['last_poster_id']."\">".$row_resultf['last_poster_name']."</a></td>";
$bt.= "</tr>";
} while($row_resultf = mysql_fetch_assoc($resultf));
$bt.= "</table>";
mysql_free_result($resultf);
return $bt;
?>
RedBull@12
07.03.2008, 23:21
Всем привет.
пишу web-бота, для online игры.
не могу заставить сокет адекватно коннектиться.
<?php
$host = "site.ru";
$address = "/game/21";
$user_agent = "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)";
$port = "80";
echo "Хост: $host\r\n";
echo "Адрес: $host$address\r\n";
echo "Порт: $port\r\n";
echo "User-Agent: $user_agent\r\n";
header("Content-type: text/plain");
$fsite = fsockopen($host,$port,$error_number,$error_descrip tion,20);
if ($fsite) {
echo "сокет открыт\r\n";
stream_set_blocking($fsite,FALSE);
fputs($fsite,"GET http://$host/ HTTP/1.1\r\n");
fputs($fsite,"Accept-Language: ru\r\n");
fputs($fsite,"Accept-Encoding: gzip, deflate\r\n");
fputs($fsite,"Content-Type: text/html\r\n");
fputs($fsite,"Content-Length: 181\r\n");
fputs($fsite,"Host: $host\r\n");
fputs($fsite,"User-Agent: $user_agent\r\n");
fputs($fsite,"Proxy-Connection: Keep-Alive\r\n");
fputs($fsite,"\r\n");
while (!feof($fsite)) {
print(fgets($fsite, 4096));
}
fclose($fsite);
}
else {
echo "ошибка\r\n";
echo "Номер: $error_number\r\n";
echo "Описание: $error_description";
}
?>
вот скрипт который пытаюсь запустить.
выдает таймаут по пингу на некоторых сайтах.
например не выдает результата на ya.ru
либо выдает 400 ошибку.
помогите запрос подкорректировать.
Заранее благодарю
.:EnoT:.
07.03.2008, 23:39
адрес лучше указывать с www или http:// ну и попробуй замени
fsockopen($host,$port,$error_number,$error_descrip tion,20);
на
fsockopen($host, $port,$errno, $errstr, 30);
и таймаут лучше побольше ставить...лично я всегда ставлю 30
RedBull@12
07.03.2008, 23:45
fsockopen($host,$port,$error_number,$error_descrip tion,20);
на
fsockopen($host, $port,$errno, $errstr, 30);
скажи чем моя строчка от твоей отличается?
я же говорю что выдает 400 ошибку точно не из-за длины таймаута.
а по поводу http://...это вообще является ошибкой.
Енот, ты не в теме.
fputs($fsite,"GET $address HTTP/1.1\r\n");
fputs($fsite,"Accept-Language: ru\r\n");
fputs($fsite,"Accept-Encoding: gzip, deflate\r\n");
fputs($fsite,"Content-Type: text/html\r\n");
fputs($fsite,"Host: $host\r\n");
fputs($fsite,"User-Agent: $user_agent\r\n");
fputs($fsite,"Proxy-Connection: Keep-Alive\r\n");
fputs($fsite,"\r\n");
Попробуй юзать эти сокеты. У тебя там лишнее кое-что было. Правда у тя выведется сжатый контент (gzip).
RedBull@12
07.03.2008, 23:49
Енот, ты не в теме.
fputs($fsite,"GET $address HTTP/1.1\r\n");
fputs($fsite,"Accept-Language: ru\r\n");
fputs($fsite,"Accept-Encoding: gzip, deflate\r\n");
fputs($fsite,"Content-Type: text/html\r\n");
fputs($fsite,"Host: $host\r\n");
fputs($fsite,"User-Agent: $user_agent\r\n");
fputs($fsite,"Proxy-Connection: Keep-Alive\r\n");
fputs($fsite,"\r\n");
Попробуй юзать эти сокеты. У тебя там лишнее кое-что было. Правда у тя выведется сжатый контент (gzip).
Благодарю, большое спасибо. я просто впервые столкнулся...
.:EnoT:.
07.03.2008, 23:50
бля, я не про то подумал, сори.
мне вот только непонятно почему не выдаётся ошибка на вот эту строчку:
echo "Адрес: $host$address\r\n";
Мдя.....столько раз делать fputs - бред
Лучше в массиве гнать:
Вот красивый хидер:
<?php
$sock = fsockopen($host, 80, $errno, $errstr, 10);
$headers = array
(
'GET '.$host.$path' HTTP/1.1',
'Host: '.$host,
'Referer: '.$host,
User-Agent: $user_agent,
'Content-Type: text/html; charset=windows-1251',
Content-Length: 181,
'Proxy-Connection: Keep-Alive'
);
fwrite($sock, implode("\r\n", $headers)."\r\n\r\n");
$xek = '';
while(!feof($sock))
{
$xek .= fgets($sock, 1024);
}
echo $xek;
Пытаюсь разобраться с работой сокетов... решил попробовать написать пр чекер... использующий сервис _be1.ru... Ещё не дошел до команд выбора и вывода строки, выдает ошибку 400... Посмотрите посоветуйте....
<?php
Error_Reporting(E_ALL & ~E_NOTICE);
echo "<form method='get'>
Хост:<input type='text' name='host' value='' /><br/>
<input type='submit' name='sub' value='Go!' /><br/>
</form>";
if(isset($_GET['sub']))
{
$res=NULL;
$host=$_GET['host'];
$sock=@fsockopen("www.be1.ru",80);
if(!$sock) die("fsockopen() error.");
fputs($sock,"GET www.be1.ru/stat/?url=http%3A%2F%2F".$host."%2F HTTP/1.0\r\n Referer: http://www.be1.ru\r\n\r\n");
for ($i = 1; $i <= 550; $i++) {
$res.=fgets($sock,128);
}
fclose ($sock);
}
echo $res;
?>
бля, я не про то подумал, сори.
мне вот только непонятно почему не выдаётся ошибка на вот эту строчку:
echo "Адрес: $host$address\r\n";
<?php
echo 'Адрес: '.$host.$address."\r\n";
?>
.:EnoT:.
07.03.2008, 23:54
<?php
echo 'Адрес: '.$host.$address."\r\n";
?>
я это и имею ввиду
RedBull@12
07.03.2008, 23:55
echo "Адрес: $host$address\r\n";
чем вам строка не нравится?
адекватно выводится...
А с чего он должен выдавать ошибку? Двойные кавычки обрадатывают переменные, там 2 переменные : $host и $address. И эти 2 переменные просто выводятся.
Zircool
$res=NULL; -> $res="";
400 Bad Request The request could not be understood by the server due to malformed syntax. The client SHOULD NOT repeat the request without modifications.
Piflit безрезультатно... пробовал... та же ошибка... я думаю может быть у меня неправильно Get запрос составлен при работе с сокетами...
Zircool, да, запрос глюченый
fputs($sock,
"GET /stat/?url=http%3A%2F%2F".$host."%2F HTTP/1.0\r\n".
"Host: www.be1.ru\r\n".
"Referer: http://www.be1.ru\r\n"
);
Так красивее)
Piflit безрезультатно... пробовал... та же ошибка... я думаю может быть у меня неправильно Get запрос составлен при работе с сокетами...
если тебе нужен только пр, то он тут есть, если еще что-то, сделай вместо 100 150 etc.
<?php
Error_Reporting(E_ALL & ~E_NOTICE);
echo "<form method='get'>
Хост:<input type='text' name='host' value='' /><br/>
<input type='submit' name='sub' value='Go!' /><br/>
</form>";
if(isset($_GET['sub']))
{
$res="";
$host=$_GET['host'];
$sock=@fsockopen("www.be1.ru",80);
if(!$sock) die("fsockopen() error.");
$q = "GET /stat/?url=http%3A%2F%2F".$host."%2F HTTP/1.1\r\n";
$q .= "Host: www.be1.ru\r\n";
$q .= "User-Agent: Opera/9.20 (Windows NT 6.0; U; en)\r\n";
$q .= "Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5\r\n";
$q .= "Accept-Language: ru-ru,ru;q=0.8,en-us;q=0.5,en;q=0.3\r\n";
$q .= "Accept-Encoding: gzip,deflate\r\n";
$q .= "Accept-Charset: windows-1251,utf-8;q=0.7,*;q=0.7\r\n";
$q .= "Keep-Alive: 300\r\n";
$q .= "Connection: keep-alive\r\n";
$q .= "Referer: http://www.be1.ru/stat/\r\n\r\n";
echo $q;
fputs($sock,$q);
for ($i = 1; $i <= 100; $i++) {
$res.=fgets($sock,128);
}
fclose ($sock);
}
echo $res;
?>
Piflit, ему нужно разобраться с работой сокетов. Ему чекер по сути не нужен.
Piflit, ему нужно разобраться с работой сокетов. Ему чекер по сути не нужен.
хорошая статья
http://phpclub.ru/detail/article/http_request
Piflit спасибо...разобрался все работает..
<?php
Error_Reporting(E_ALL & ~E_NOTICE);
echo "<form method='get'>
Хост:<input type='text' name='host' value='' /><br/>
<input type='submit' name='sub' value='Go!' /><br/>
</form>";
if(isset($_GET['sub']))
{
$img="";
$host=$_GET['host'];
$host=str_replace("/","",$host);
$host=str_replace(">","",$host);
$host=str_replace("<","",$host);
$host=str_replace("%3C","",$host);
$host=str_replace("%3E","",$host);
$sock=@fsockopen("www.be1.ru",80);
if(!$sock) die("fsockopen() error.");
fputs($sock,
"GET /stat/?url=http%3A%2F%2F".$host."%2F HTTP/1.0\r\n".
"Host: www.be1.ru\r\n".
"Referer: http://www.be1.ru\r\n\r\n"
);
while(!feof($sock))
{
$img .= fgets($sock, 1024);
}
$pos = strpos($img, "Google Page Rank");
$got=substr($img,$pos,20);
}
echo "Сайт: $host<br>";
echo $got;
?>
есть какая-нибудь глобальная разница при работе с сокетами и курлом?
presidentua
08.03.2008, 03:25
есть какая-нибудь глобальная разница при работе с сокетами и курлом?
Разницы глобальной нет. Курл как удобная надстройка над сокетамы. Но лучше юзать Курл, так как у многих провайдеров Курл включен, но сокеты включены очень редко. ИМХО
spamoney
08.03.2008, 10:06
Здравствуйте, такой вопрос:
Как выводить из массива только уникальные слова не зависимо от регистра, причем при выводе регистр слова должен быть сохранен??
Пробывал так:
$slovo1= "Слово, слово, СлОвО";
$slovo = array_unique(explode(",", strtolower($slovo1)));
foreach ($slovo as $val) {
if ($val != "") {
echo "$val";
}
}
но при выводе регистр не сохряняется
spamoney немного не понял вопрос тебе нужно вывести массив слов $slovo1 не зависимо от их регистра..так?
$slovo1= "Слово, слово, СлОвО";
$slovo = array_unique(explode(",", $slovo1));
foreach ($slovo as $val) {
if ($val != "") {
echo "$val";
}
}
spamoney
08.03.2008, 11:32
Нет, мне нужно вывести только те слова, которые не повторяются, т.е из:
$slovo1= "Слово, слово, СлОвО, трам, Трам, ТрАм";
скрипт должен вывести только
Слово, трам
<?php
function array_iunique($array) {
$lover_unique_array = array_unique( array_flip( array_change_key_case( array_flip($array), CASE_LOWER) ) );
return array_uintersect_assoc($array, $lover_unique_array, "strcasecmp");
}
$array = array('i uSe addiDas', 'I uSe AddiDaS', 'it is cool', 'it IS CooL', 'IT IS COOL');
print_r(array_iunique($array));
?>
Не смог добиться того, чтобы переводил и русские символы. Только инглиш.
astrologer
08.03.2008, 12:43
<?php
$str = "Слово, слово, СлОвО, трам, Трам, ТрАм";
echo preg_replace('/\b(\w+)(?:\,\s+\1\b)+/i', '\1', $str);
?>
spamoney
08.03.2008, 12:57
Спасибо ребята!
Вариант astrologer Работает!!
spamoney
08.03.2008, 13:29
Хм, а если слова будут идти в таком порядке:
$str = "Слово, трам, СлОвО, трам, anti, ТрАм";
т.е повторятся не друг за другом, тогда возможно как нибудь выводить только не повторяющиеся??
Не смог добиться того, чтобы переводил и русские символы. Только инглиш.
Это по моему зависит от конфигурации сервера.Попробуй с locale.
пс хорошая реализация но функции какие-то извращенские.
Flame of Soul
09.03.2008, 01:39
простите не работала с пхп под линуксом((
<*? print (system(cmd)); ?*> как будет выглядеть под линуксом?
RedBull@12
09.03.2008, 01:40
парни помогите еще раз.
помогите разобраться теперь с Post запросом, как его правильно формировать?
fputs($fsite,"POST $address HTTP/1.1\r\n");
fputs($fsite,"Accept-Language: ru\r\n");
fputs($fsite,"Content-Type: text/html\r\n");
fputs($fsite,"Host: $host\r\n");
fputs($fsite,"User-Agent: $user_agent\r\n");
fputs($fsite,"Proxy-Connection: Keep-Alive\r\n");
fputs($fsite,"\r\n");
fputs($fsite,"login=$login&pass=$pass\r\n");
что не правильно?
RedBull@12
09.03.2008, 01:42
простите не работала с пхп под линуксом((
<*? print (system(cmd)); ?*> как будет выглядеть под линуксом?
вроде как просто здаешь команды и все...
<?php print(system("ls")); ?>
если не ошибаюсь
а можно еще проще.
<?php print(`ls`)?>
RedBull@12 если есть конкретный сайт и там есть форма для отправки запроса, просто поснифай хедеры и вставь с скрипт. или сюда выложи
RedBull@12
Меняются только сокеты:
POST /translate_t?langpair=en|ru HTTP/1.0
Host: translate.google.com
Content-Type: application/x-www-form-urlencoded
Content-Length: 32
hl=en&ie=UTF8&text=it+is+example
В остальном всё так же.
RedBull@12
09.03.2008, 02:06
RedBull@12
Меняются только сокеты:
POST /translate_t?langpair=en|ru HTTP/1.0
Host: translate.google.com
Content-Type: application/x-www-form-urlencoded
Content-Length: 32
hl=en&ie=UTF8&text=it+is+example
В остальном всё так же.
большое спасибо.
чем === отличатеся от ==?
и !== от !=?
чем === отличатеся от ==?
и !== от !=?
хм... это прикол такой...?
$a == $b Равно TRUE если $a равно $b
$a === $b Тождественно равно TRUE если $a равно $b и имеет тот же тип
тоже самое и с неравно
$a != $b Не равно TRUE если $a не равно $b
$a !== $b Тождественно не равно TRUE если $a не равно $b или в случае, если они разных типов
тогда в каких случаях $a == $b может быть false, а $a === $b true? при одних и тех же $a и $b
NOmeR1 я про другое спрашиваю
RedBull@12
09.03.2008, 23:14
NOmeR1 я про другое спрашиваю
так и объясни что тебе нужно.
а вообще это азы.
$a = $b сравнивает только по типу. если $a - строковое значение, и $b строковое - TRUE.
<?php
$a = 1;
$b = 2;
$c = '1';
if ($a = $b) { //return TRUE }
if ($a = $c ) { //return FALSE }
?>
$a == $b автоматически приравнивает $a и $b к строковому типу и сравнивает.
<?php
$a = 1;
$b = 2;
$c = '1';
if ($a == $b) { //return FALSE }
if ($a == $c ) { //return TRUE }
?>
$a === $b сразу сравнивает и по значению и по типам.
<?php
$a = 1;
$b = 2;
$c = '1';
$d = 2;
if ($a === $b) { //return FALSE }
if ($a === $c ) { //return FALSE }
if ($b === $d ) { //return TRUE }
?>
astrologer
09.03.2008, 23:16
<pre>
<?php
echo
'(true == 1) : ', (true == 1 ? 'true':'false' ),
'<br>',
'(true === 1) : ', (true === 1 ? 'true':'false' );
?>
</pre>
Никак, потому что у === больше условий.
vBulletin® v3.8.14, Copyright ©2000-2026, vBulletin Solutions, Inc. Перевод: zCarot