PDA

Просмотр полной версии : [php] Новичкам: задаем вопросы


Страницы : 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 [42] 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66

m0Hze
25.04.2009, 18:18
m0Hze Потому что гладиолус.
Returns an array that corresponds to the fetched row and moves the internal data pointer ahead.


while ($row = mysql_fetch_array($query)) print_r($row);


А немогли с самого начала сказать,а не выеживаца?
Спасибо.

Byrger
25.04.2009, 22:20
Есть функция которая выводит дату...
$date = date("d.m.Y", time());
Как из этот даты получить обратно секунды как в функции time()
Точность как видите до 1 дня...

mr.The
25.04.2009, 23:37
Есть функция которая выводит дату...
$date = date("d.m.Y", time());
Как из этот даты получить обратно секунды как в функции time()
Точность как видите до 1 дня...
_ttp://ru2.php.net/manual/ru/function.strtotime.php

DTW
27.04.2009, 16:37
Как сделать чтоб было так не было хтмл тегов


function treecat($parent=0,$lv=0)
{

connection();
$sql = mysql_query('SELECT id,parent,name FROM category where parent = '.intval($parent));

while($cat = mysql_fetch_array($sql))
{
if ($lv == 2 ) break;
if ($cat['parent'] !=0) {


echo "<tbody><tr><td><a href=theme.php?cat=".$cat['id'].">".$cat['name']."</a></td></tr></tbody>";

}
else
{

echo "<thead><tr><th class=\"title\">". $cat['name']."</th></tr></thead>";
}

treecat($cat['id'],$lv+1) ;

}

}




Например если сделать так в выводит массив



function treecat($parent=0,$lv=0)
{

$arr= array();


connection();
$msql = mysql_query('SELECT id,parent,name FROM category where parent = '.intval($parent));
if(mysql_num_rows($msql)> 0) {

while($cat = mysql_fetch_array($msql))
{
if ($lv == 2 ) break;

$arr[] = $cat;

//echo "<tbody><tr><td><a href=theme.php?cat=".$cat['id'].">".$cat['name']."</a></td></tr></tbody>";




//echo "<thead><tr><th class=\"title\">". $cat['name']."</th></tr></thead>";


$arr[] = treecat($cat['id'],$lv+1) ;

}
return $arr ;
}
}


$forum = treecat();
echo "<pre>";
print_r($forum);



?>



Array
(
[0] => Array
(
[0] => 3
[id] => 3
[1] => 0
[parent] => 0
[2] => Auto
[name] => Auto
)

[1] => Array
(
[0] => Array
(
[0] => 5
[id] => 5
[1] => 3
[parent] => 3
[2] => BNW
[name] => BNW
)

[1] => Array
(
)

[2] => Array
(
[0] => 6
[id] => 6
[1] => 3
[parent] => 3
[2] => Mercedes Benz
[name] => Mercedes Benz
)

[3] =>
)

[2] => Array
(
[0] => 4
[id] => 4
[1] => 0
[parent] => 0
[2] => Work
[name] => Work
)

[3] => Array
(
[0] => Array
(
[0] => 7
[id] => 7
[1] => 4
[parent] => 4
[2] => Find job
[name] => Find job
)

[1] =>
[2] => Array
(
[0] => 8
[id] => 8
[1] => 4
[parent] => 4
[2] => Get job
[name] => Get job
)

[3] =>
)

[4] => Array
(
[0] => 9
[id] => 9
[1] => 0
[parent] => 0
[2] => Programing language
[name] => Programing language
)

[5] => Array
(
[0] => Array
(
[0] => 10
[id] => 10
[1] => 9
[parent] => 9
[2] => Php
[name] => Php
)

[1] =>
[2] => Array
(
[0] => 11
[id] => 11
[1] => 9
[parent] => 9
[2] => C++
[name] => C++
)

[3] =>
)

[6] => Array
(
[0] => 13
[id] => 13
[1] => 0
[parent] => 0
[2] => Films
[name] => Films
)

[7] => Array
(
[0] => Array
(
[0] => 14
[id] => 14
[1] => 13
[parent] => 13
[2] => Comedy
[name] => Comedy
)

[1] =>
[2] => Array
(
[0] => 15
[id] => 15
[1] => 13
[parent] => 13
[2] => Triller
[name] => Triller
)

[3] =>
)

)




как его потом вывести в хтмл вида

и правельно ли я вернул массив

как его потом вывести в хтмл вида ..

<table border="1" width="70%" cellpadding="2" cellspacing="0 class="bord" >
<thead><tr><th class="title"></th></tr></thead>
<tbody>
<tr><td><a href=theme.php?cat=""> </a></td></tr>
</tbody>
</table>
<br/>
Суб категория
<table border="1" width="70%" cellpadding="2" cellspacing="0 class="bord" >
<thead><tr><th class="title"></th></tr></thead>
<tbody>
<tr><td><a href=theme.php?cat=""> </a></td></tr>
</tbody>
</table>



Как лучше это сделать?

[R]eD
27.04.2009, 18:49
Знает кто-нибудь хостинг (платный/бесплатный), где можно открывать постоянное соединение с mysql-сервером и постепенно передавать ему запросы, лимитов на время быть не должно.
Спасибо.

Byrger
27.04.2009, 19:12
как рандомно достать запись из БД?
И возвожно это по средствам запроса сделать?

mailbrush
27.04.2009, 19:54
Как полностью остановить работу скрипта, после чего сразу же возобновить. Цикл foreach. sleep(), flush(), не предлагать, т.к. они приостанавливают, но скрипт работает.

Byrger
27.04.2009, 20:13
Как полностью остановить работу скрипта, после чего сразу же возобновить. Цикл foreach. sleep(), flush(), не предлагать, т.к. они приостанавливают, но скрипт работает.

Я думаю тогда только запись в БД или фаил и потом проверка на время по крону

Byrger
27.04.2009, 20:21
2Byrger

mysql_query("SELECT * from table_name where id=rand(1,mysql_field_count())");

mysql_field_count()- узнаете кол-во строк;
rand()-выводите число в диапазоне от 1 до [кол-во строк]

У меня id не упарядоченое.

mailbrush
27.04.2009, 20:50
mysql_query("SELECT id from table_name limit 1,mysql_field_count()");

KaZ@NoVa
28.04.2009, 01:16
eD']Знает кто-нибудь хостинг (платный/бесплатный), где можно открывать постоянное соединение с mysql-сервером и постепенно передавать ему запросы, лимитов на время быть не должно.
Спасибо.

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

Carbon1
28.04.2009, 04:34
Может кто знает как сделать авторизацию по юзеру в веб форме.Т.е . Надо чтобы пользователь мог авторизоваться и увидеть определенную страницу, которую я напишу.

Пользователь Вася вводить свой логин и пасс и видит привет вася, а пользователь Петя допустим вводит логин и пасс и видит допустим страницу привет корч Петя...

DTW
28.04.2009, 07:01
<?php




$model = array('0'=>array('name'=>'Auto'),
'1'=>array('0'=>array('name'=>'Model1'),
'1'=>array('name'=>'Model2') ));

?>


<table border="1" width="70%" cellpadding="2" cellspacing="0 class="bord" >
<?php

foreach($model as $v)

foreach($v as $vz) {

?>
<thead><tr><th class="title">
<?php echo $vz; ?>

</th></tr></thead>


<?php
foreach($vz as $z)
{
?>
<tbody>
<tr><td><a href=><?php echo $z; ?></a></td></tr>
</tbody>
<?php
}
}

?>
</table>
<br/>

Warning: Invalid argument supplied for foreach()

Хотя и данные достает

Как избавиться еще от Array

DTW
28.04.2009, 07:07
Может кто знает как сделать авторизацию по юзеру в веб форме.Т.е . Надо чтобы пользователь мог авторизоваться и увидеть определенную страницу, которую я напишу.

Пользователь Вася вводить свой логин и пасс и видит привет вася, а пользователь Петя допустим вводит логин и пасс и видит допустим страницу привет корч Петя...


function autorization($login,$pass)
{
connection();
$q="select id,name from user where name='".$login."' and pass='".$pass."' limit 1";
$rezult = mysql_query($q);
if (!$rezult) echo mysql_error();
if (mysql_num_rows($rezult) > 0) {
$rows = mysql_fetch_array($rezult);

$_SESSION['user'] = $rows['id'];
$_SESSION['name'] = $rows['name'];
}

}







CREATE TABLE IF NOT EXISTS `user` (
`id` int(11) NOT NULL auto_increment,
`name` varchar(255) NOT NULL default '',
`pass` varchar(255) NOT NULL default '',
`email` varchar(255) NOT NULL default '',
`icq` int(8) NOT NULL default '0',
`picture` varchar(255) NOT NULL default '',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=5 ;





потом используй сессии $_SESSION['user']

делай проверку на сессиЮ

Vinsik
28.04.2009, 12:57
как выполнить system("clear.bat"); чтоб небыло видно на странице? А то у мну надпись вверху c:\webserv\echo off

NuR
28.04.2009, 12:59
system("clear.bat",$ret);

Vinsik
28.04.2009, 13:01
серно вывод есть( C:\webserv\>echo off

Carbon1
28.04.2009, 13:05
function autorization($login,$pass)
{
connection();
$q="select id,name from user where name='".$login."' and pass='".$pass."' limit 1";
$rezult = mysql_query($q);
if (!$rezult) echo mysql_error();
if (mysql_num_rows($rezult) > 0) {
$rows = mysql_fetch_array($rezult);

$_SESSION['user'] = $rows['id'];
$_SESSION['name'] = $rows['name'];
}

}








потом используй сессии $_SESSION['user']

делай проверку на сессиЮ

можно поподробнее?с html с php страничкой,а то я неочень азбираюсь

m0Hze
28.04.2009, 13:13
Велсипед изрбретаем товарищи.
http://freshcoder.ru/archives/249

Vinsik
28.04.2009, 13:36
как выполнить system("clear.bat"); чтоб небыло видно на странице? А то у мну надпись вверху c:\webserv\echo off
system("clear.bat",$ret); непомогает, ребя помогите :confused:

NuR
28.04.2009, 14:23
system("clear.bat",$ret); непомогает, ребя помогите :confused:

попробуй exec("clear.bat"); хотя я не понял почему у меня пхп ругается на третий параметр функции system

Nightmarе
28.04.2009, 14:46
У меня к вам следующий вопрос ©

Есть функция замены всех русских символов на английские, а так-же всех спецсимволов на _

function transliteral($text=null){
$maska=array('Ч'=>'Ch','Ш'=>'Sh','Щ'=>'Sch','Ю'=>'Yu'
,'ш'=>'sh','щ'=>'sch','ю'=>'yu','я'=>'ya'
,'А'=>'A','Б'=>'B','В'=>'V','Г'=>'G'
,'Д'=>'D','Е'=>'E','Ё'=>'E','Ж'=>'J'
,'З'=>'Z','И'=>'I','Й'=>'Y','К'=>'K'
,'Л'=>'L','М'=>'M','Н'=>'N','О'=>'O'
,'П'=>'P','Р'=>'R','С'=>'S','Т'=>'T'
,'У'=>'U','Ф'=>'F','Х'=>'H','Ц'=>'C'
,'Ъ'=>'"','Ы'=>'Y','Ь'=>'b','Э'=>'E'
,'а'=>'a','б'=>'b','в'=>'v','г'=>'g'
,'д'=>'d','е'=>'e','ё'=>'e','ж'=>'j'
,'з'=>'z','и'=>'i','й'=>'y','к'=>'k'
,'л'=>'l','м'=>'m','н'=>'n','о'=>'o'
,'п'=>'p','р'=>'r','с'=>'s','т'=>'t'
,'у'=>'u','ф'=>'f','х'=>'h','ц'=>'c'
,'ь'=>'b','ы'=>'y','ъ'=>'"','э'=>'e'
,'Я'=>'Ya','ч'=>'ch' ,' '=>'_','@'=>'_'
,'#'=>'_',','=>'_','{'=>'_','}'=>'_'
,'['=>'_',']'=>'_');

return !empty($text) ? strtr($text,$maska) : null;

}

Она работает хорошо если работать с текстом напрямую, но при заливке файлов криво заменяет имена файлов.

Вот например простой текст:
$lol = "Текстовый документ (2).txt";
echo transliteral($lol);
Выводит: Tekstovyy_dokument_(2).txt

Но если воспользоваться вот так:
$uploadfile = basename($_FILES['userfile']['name']);
move_uploaded_file($_FILES['userfile']['tmp_name'], transliteral($uploadfile))
То файлы криво называются, например тот-же "Текстовый документ (2).txt" отображается потом как: "_dokument_(2).txt"

Поясните почему так происходит, и как это исправить.

Vinsik
28.04.2009, 15:01
попробуй exec("clear.bat"); хотя я не понял почему у меня пхп ругается на третий параметр функции system
exec("clear.bat"); работает! =) Спс!

erihtoney
28.04.2009, 15:02
2Nightmarе
Попробуйте по другому определять имя файла,не использую basename,незнаю,но возможно идет кодировкание в hex и обратно,чисто по логике

Byrger
28.04.2009, 15:06
Как достать из каталога имена файлов?

Nightmarе
28.04.2009, 15:08
2Nightmarе
Попробуйте по другому определять имя файла,не использую basename,незнаю,но возможно идет кодировкание в hex и обратно,чисто по логике
Тогда там будет вообще полный путь до файла.
не думаю что это поможет.

erihtoney
28.04.2009, 15:10
2Byrger

<?php
$path = "/path/other/file.txt";
echo basename($path );
// выводит "file.txt"
echo basename($path, '.txt');
// выводит "file"
?>

Byrger
28.04.2009, 15:52
2Byrger

<?php
$path = "/path/other/file.txt";
echo basename($path );
// выводит "file.txt"
echo basename($path, '.txt');
// выводит "file"
?>
Имена!

тоесть нужен цикл который будет просмотривать каталог и выводить имена файлов...

mailbrush
28.04.2009, 16:20
2Byrger
<?php
$dir = "/tmp/";

// Открыть заведомо существующий каталог и начать считывать его содержимое
if (is_dir($dir)) {
if ($dh = opendir($dir)) {
while (($file = readdir($dh)) !== false) {
print "Файл: $file : тип: " . filetype($dir . $file) . "<br>";
}
closedir($dh);
}
}

m0Hze
28.04.2009, 16:30
Тогда там будет вообще полный путь до файла.
не думаю что это поможет.
Также столкнулся с этим.Свзяано,как я понял,с тем,что символы заменяються по 2 раза.Тоесть прошел один круг,и пошел на второй,вот первые символы и меняються по нескольку раз.

#Wolf#
28.04.2009, 16:44
http://www.govnokod.ru/960
Недавно что-то подобное писал. Как будет рациональнее? Заюзать функцию?

Nightmarе
28.04.2009, 16:49
Также столкнулся с этим.Свзяано,как я понял,с тем,что символы заменяються по 2 раза.Тоесть прошел один круг,и пошел на второй,вот первые символы и меняються по нескольку раз.
Не думаю, функция move_uploaded_file имеет 2 параметра, что и куда, она просто кладёт файл и всё.
Ничего 2 раза не делается. Хотя могу и ошибатсья, но на мой взгляд именно так.

Причём у меня на локалхосте никаких проблемм нету (Винда), либо это только на линуксе, либо ещё какая настройка.

mr.The
28.04.2009, 16:52
Недавно что-то подобное писал. Как будет рациональнее? Заюзать функцию?
если я правильно понял, что ты хочеш - делай так:
if (isset($_POST['id'])) $id = $_POST['id'];

m0Hze
28.04.2009, 17:02
Не думаю, функция move_uploaded_file имеет 2 параметра, что и куда, она просто кладёт файл и всё.
Ничего 2 раза не делается. Хотя могу и ошибатсья, но на мой взгляд именно так.

Причём у меня на локалхосте никаких проблемм нету (Винда), либо это только на линуксе, либо ещё какая настройка.
Во тдада,у меня на винде все тоже отлично,на Фряхе,все ломаеца.Либо первы есимволы кривые,либо последние.
Мучался,мучался,ну ее нах.Сделал проще.
$a = "Hello";
И в php предусмотрено, $a[1] уже равна "H".Тоесть это уже массив.
Я просто в ццикле,меняю отдельно каждую букву вот и все.
А с str_replace, strtr я мучаца задолбался

mailbrush
28.04.2009, 17:05
register_globals есть, но юзать не рекомендую.

Nightmarе
28.04.2009, 18:08
Во тдада,у меня на винде все тоже отлично,на Фряхе,все ломаеца.Либо первы есимволы кривые,либо последние.
Мучался,мучался,ну ее нах.Сделал проще.
$a = "Hello";
И в php предусмотрено, $a[1] уже равна "H".Тоесть это уже массив.
Я просто в ццикле,меняю отдельно каждую букву вот и все.
А с str_replace, strtr я мучаца задолбался
Если не сложно, выложи плз полный код как это реализуется.

m0Hze
28.04.2009, 23:21
Чтото типо.

$text = "Привет люди! Это тестовый скрипт транслита!";
function translit($text)
{
$array = str_split($text);

$rus = array('а', 'б', 'ц', 'д', 'е', 'ф', 'г', 'х', 'и', 'й', 'к', 'л', 'м',
'н', 'о', 'п', 'э', 'р', 'с', 'т', 'у', 'ю', 'в', 'ш', 'ы', 'ч', 'з', 'я', 'А',
'Б', 'Ц', 'Д', 'Е', 'Ф', 'Г', 'Х', 'И', 'Й', 'К', 'Л', 'М', 'Н', 'О', 'П', 'Э',
'Р', 'С', 'Т', 'У', 'Ю', 'В', 'Ш', 'Ы', 'Ч', 'З',' ');
$eng = array('a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm',
'n', 'o', 'p', 'e', 'r', 's', 't', 'u','yu', 'v', 'w', 'i', 'y', 'z', ';', 'A', 'B',
'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'E', 'R',
'S', 'T', 'U','Yu', 'V', 'W', 'I', 'Y', 'Z','_');
for ($i = 0; $i < count($array); $i++) {
$str .= str_replace($rus, $eng, $array[$i]);
}
return ($str);

}
echo translit($text);

Но,нужно некторые буквы,в транслите заменить,масив кривой,и некоторые буквы повторяються,например "И"и "Ы" заменяються одинаковыми символамИ,поэтому при ре-транслите,будут ошибки.Ну это уже сам дорабатывай,как ты хочеш чтобы заменяло.Вот этот вариант,у меня на никсах работает,а с обычным стр_репласе,без отдельных элемеентов масива - непашеьт,так же как у тебя.

Balvan
29.04.2009, 11:17
А как можно подсчитать кол-во вхождений символов в строке(тексте)?

ну вот в общем есть один метод расшифровки сообщений "статистический" называется! Т.е. есть определённая статистика по "вхождению" букв в текст(есле надо преведу вам её позже, щас в универ бежать надо :) ) и вот собирается статистика с зашифрованного сообщения, а после сравнивается с "табличными" значениями и затем заменяются буквы.
вот например буква "а" встречается допустим 15 раз на 100 символов, сняв статистику с зашифрованного сообщения видим что "ы" встречается также 15/100 раз ну и значит заменяем все "Ы" на "А".

Pashkela
29.04.2009, 11:20
<?php
echo substr_count("This is a test", "is"); // 2
?>


http://ru.php.net/substr_count

Gifts
29.04.2009, 11:27
Balvan print_r(count_chars('Какая-то произвольная строка',1)); Правда все равно шифр простой замены на коротком сообщении вряд ли можно разгадать, плюс многие буквы встречаются с одинаковой вероятностью (опять таки для языка в целом, но не для данного сообщения)

NuR
29.04.2009, 12:13
А как можно подсчитать кол-во вхождений символов в строке(тексте)?

ну вот в общем есть один метод расшифровки сообщений "статистический" называется! Т.е. есть определённая статистика по "вхождению" букв в текст(есле надо преведу вам её позже, щас в универ бежать надо :) ) и вот собирается статистика с зашифрованного сообщения, а после сравнивается с "табличными" значениями и затем заменяются буквы.
вот например буква "а" встречается допустим 15 раз на 100 символов, сняв статистику с зашифрованного сообщения видим что "ы" встречается также 15/100 раз ну и значит заменяем все "Ы" на "А".

http://www.sendspace.com/file/la1dhk

тут специальная програмулина для частотного криптоанализа =) ею будет проще ;) сначала кормишь ей текст что в архиве или любой другой, потом свой шифротекст, а дальше ты сам знаешь что делать)

m0Hze
29.04.2009, 13:45
У меня к вам следующий вопрос ©

Есть функция замены всех русских символов на английские, а так-же всех спецсимволов на _

function transliteral($text=null){
$maska=array('Ч'=>'Ch','Ш'=>'Sh','Щ'=>'Sch','Ю'=>'Yu'
,'ш'=>'sh','щ'=>'sch','ю'=>'yu','я'=>'ya'
,'А'=>'A','Б'=>'B','В'=>'V','Г'=>'G'
,'Д'=>'D','Е'=>'E','Ё'=>'E','Ж'=>'J'
,'З'=>'Z','И'=>'I','Й'=>'Y','К'=>'K'
,'Л'=>'L','М'=>'M','Н'=>'N','О'=>'O'
,'П'=>'P','Р'=>'R','С'=>'S','Т'=>'T'
,'У'=>'U','Ф'=>'F','Х'=>'H','Ц'=>'C'
,'Ъ'=>'"','Ы'=>'Y','Ь'=>'b','Э'=>'E'
,'а'=>'a','б'=>'b','в'=>'v','г'=>'g'
,'д'=>'d','е'=>'e','ё'=>'e','ж'=>'j'
,'з'=>'z','и'=>'i','й'=>'y','к'=>'k'
,'л'=>'l','м'=>'m','н'=>'n','о'=>'o'
,'п'=>'p','р'=>'r','с'=>'s','т'=>'t'
,'у'=>'u','ф'=>'f','х'=>'h','ц'=>'c'
,'ь'=>'b','ы'=>'y','ъ'=>'"','э'=>'e'
,'Я'=>'Ya','ч'=>'ch' ,' '=>'_','@'=>'_'
,'#'=>'_',','=>'_','{'=>'_','}'=>'_'
,'['=>'_',']'=>'_');

return !empty($text) ? strtr($text,$maska) : null;

}

Она работает хорошо если работать с текстом напрямую, но при заливке файлов криво заменяет имена файлов.

Вот например простой текст:
$lol = "Текстовый документ (2).txt";
echo transliteral($lol);
Выводит: Tekstovyy_dokument_(2).txt

Но если воспользоваться вот так:
$uploadfile = basename($_FILES['userfile']['name']);
move_uploaded_file($_FILES['userfile']['tmp_name'], transliteral($uploadfile))
То файлы криво называются, например тот-же "Текстовый документ (2).txt" отображается потом как: "_dokument_(2).txt"

Поясните почему так происходит, и как это исправить.
Если ктото сталкнетьсяя с такой проблеой,то вся проблема была в basename($_FILES['userfile']['name']);
Без basename все прекрасно работает,ведь в $_FILES['userfile']['name'] находиться название,без пути,так что вот в чем были траблы.

Mosvit
29.04.2009, 14:12
Помогите исправить ICQ-бот на PHP что бы он при получении сообщения от кого-либо отправлял сообщения с текстом из текстового файла по-строчно, с небольшим интервалом времени, как бы имитируя разговор настоящего человека.
Т.е. на каждое полученое сообщение от одного номера отвечал новой фразой из текстового файла.


<?
include "c99phpicq.php";
set_time_limit (0);
ignore_user_abort(true);
$icq = new ICQclient("uin","pass");
$icq->errorstream = false;
$icq->dbgstream = false;
$icq->connect();
$icq->setstatus("NA","WORK");
$icq->setstatusflags("DCCONT","");
$icq->login();
while ($icq->socket)
{
$icq->listen();
if ($icq->ismessage())
{
$uin = $icq->inLastVar["uin"];
$text = $icq->inLastVar["text"];
$mid = md5($icq->inLastVar["mid"]);
$text = trim($text);

/*скрипт заканчивает свое выполнение --дисконнект бота*/
if ($text == "!exit" && $uin=="uin_admin")
{
exit;
}



switch($text)
{
case "/nomer" :
$icq->message_send($uin,"message");
break;
default:
$icq->message_send($uin,"Меня сейчас нет. :)"); #по умолчанию ответ бота
}

/* запись всех посланных сообщений боты*/

$log="log.txt";
$fp = fopen($log,"a+");
fwrite($fp,"$uin:$text\n");
fclose($fp);

}
}

mff
29.04.2009, 14:12
Вопрос php-гурам :)
Дали мне магазин на реконструкцию, а там код куда попало, раскидан весь как зря, даже копаться в лом теперь. Как можно его структуировать в более-мение читаемый вид? Помню в дримвейвере была такая кнопка для html кода, а как то же самое сделать с php?

Спасибо!

m0Hze
29.04.2009, 14:32
PHPDesigner, Ctrl+Shift+F1

m0Hze
29.04.2009, 22:18
Задумался,как на php, редиректнуть юзверя без реферера? Как на ачате.Посмотрел header(); чтото нужного ненашел :(

AkyHa_MaTaTa
29.04.2009, 22:38
На ачате через js, через php никак(именно через HTTP хедары) ибо это делает клиент, в смысле передает рефферер.

m0Hze
29.04.2009, 22:43
Вот в чом чом,а в js я точно ниччего непонимю.Пошел рыть античат...

lothlorian
30.04.2009, 06:18
есть php скрипт для поиска файлов на сервере:

<?php
scan_dir("/xampp/htdocs");
//////////////////////////////////////////////////////////

// Рекурсивная функция - спускаемся вниз по каталогу

//////////////////////////////////////////////////////////

function scan_dir($dirname)

{

// Объявляем переменные замены глобальными

GLOBAL $text, $retext;

// Открываем текущую директорию

$dir = opendir($dirname);

// Читаем в цикле директорию

while (($file = readdir($dir)) !== false)

{

// Если файл обрабатываем его содержимое

if($file != "." && $file != "..")

{

// Если имеем дело с файлом - производим в нём замену

if(is_file($dirname."/".$file))

{


//echo $file."<br>";


$findme = '156_med.jpg';

$pos = strpos($file, $findme);

if ($pos !== false) {
echo $dirname."/".$file."<br>"."\n";

$f = fopen("data.txt", "a+");
fwrite($f, $dirname."/".$file."\n");
fclose($f);

}

}

// Если перед нами директория, вызываем рекурсивно

// функцию scan_dir

if(is_dir($dirname."/".$file))

{

// echo $dirname."/".$file."<br>";

scan_dir($dirname."/".$file);

}

}

}

// Закрываем директорию

closedir($dir);

}

?>
файлов и папок на сервере ооочень много.

через пару минут выполнения выдаёт internal server error

уже не знаю куда копать... и в чём проблема в скрипте или сервер...

php.ini (есть возможность ред.) уже весь перекопал,
memory limit увеличивал (не помогло).

Подскажите в чём может быть проблема?
и как можно оптимизировать скрипт.

Gifts
30.04.2009, 08:38
lothlorian system/exec/passthru заблокированы что ль, что приходится так извращаться?

Попробуй убрать рекурсию, точнее сделать ее немного по другому. Ака закрывать все открытые ресурсы, до вызова функции.

<?php
set_time_limit(0);
scan_dir("/xampp/htdocs");
//////////////////////////////////////////////////////////
// Рекурсивная функция - спускаемся вниз по каталогу
//////////////////////////////////////////////////////////
function scan_dir($dirname)
{
$dirs = array();
// Объявляем переменные замены глобальными
GLOBAL $text, $retext;
// Открываем текущую директорию
$dir = opendir($dirname);
// Читаем в цикле директорию
while (($file = readdir($dir)) !== false)
{
// Если файл обрабатываем его содержимое
if($file != "." && $file != "..")
{
// Если имеем дело с файлом - производим в нём амену
if(is_file($dirname."/".$file))
{

//echo $file."<br>";

$findme = 'background.png';

$pos = strpos($file, $findme);

if ($pos !== false)
{
##echo $dirname."/".$file."<br>"."\n";

$f = fopen("data.txt", "a+");
fwrite($f, $dirname."/".$file."\n");
fclose($f);
}
}
// Если перед нами директория, вызываем рекурсивно
// функцию scan_dir
if(is_dir($dirname."/".$file))
{
// echo $dirname."/".$file."<br>";
echo " ";
$dirs[]=$dirname."/".$file;
}
}
}
// Закрываем директорию
closedir($dir);
while ($one = array_pop($dirs))
{
scan_dir($one);
}
}
?>

kevmen
30.04.2009, 11:27
как проверить существует ли запись в бд?

$true=mysql_query("SELECT * from users WHERE name=$name");
if($true=TRUE){}


Не работает

mff
30.04.2009, 11:40
$true==TRUE =)
if($true){...}
да и зря ты переменныю так называл...

Gifts
30.04.2009, 11:41
kevmen Тру :-D

if (mysql_query('SELECT * from users WHERE name=\''.mysql_real_escape_string($name)."'"))
{
echo 'запись есть';
}И еще - а вы уверены, что переменная $name - установлена?

kevmen
30.04.2009, 11:42
ну разумеется,это лишь пример,спасибо,разобрался :)

krypt3r
30.04.2009, 12:37
if (mysql_num_rows ($true) > 0) {
// запись есть
}

m0Hze
30.04.2009, 12:58
Собственно говоря,начал потихоньку двигаться в сторону ООП,и вот первый вопрос родился:
Как внутри класса вызват функцию,которая оперелена в нем?
Ну например:

class olo{
function abc(){
.........
}
Function opt(){
.....abc();
}
}

Так есесно выскакивает ошибко.В статьях,которые сейчас читаю,ничего подобного ненашел.

krypt3r
30.04.2009, 13:02
$this->abc();

m0Hze
30.04.2009, 13:05
$this->abc();

Перед этим в классе ничего не нужно проводить,никаикх манипуляций? Тоесть будет просто:

class olo{
function abc(){
.........
}
Function opt(){
.....$this -> abc();
}
}

RedBull@12
01.05.2009, 15:16
всем здравсвуйте.
есть кусок кода и дальше идет отправка сообщения на мыло через стандартную функцию mail().
Вопрос в том как можно немного модифицировать дату отправки. т.е. по дефолту дата отправки ставит нынешняя.
как можно изменить ее на вчерашнюю? видел делали, но вопрос как?

RedBull@12
01.05.2009, 15:27
2Extremal,
меня инетерсует не как изменить саму дату. а как изменить дату отправки в отправленном письме?

krypt3r
01.05.2009, 19:06
Попробуйте отправлять мыло с хэдерами, которые вы сами пропишете

RedBull@12
01.05.2009, 19:36
Попробуйте отправлять мыло с хэдерами, которые вы сами пропишете
да именно про хедеры я и говорю. какие заголовки нужно прописать?

mailbrush
01.05.2009, 19:53
http://php.net/mail

Fepsis
01.05.2009, 21:29
Друзья, подскажите какой командой страницу перезагрузить на PHP..?!? :(

.:EnoT:.
01.05.2009, 21:29
$head = "Date: " . date("D, d M Y H:i:s") . " UT\r\n"; // <<<<<<<<<<
$head .= "Subject: =?Utf-8?B?" . base64_encode($subject) . "=?=\r\n";
$head .= "X-Mailer: The Bat! (v3.99.3) Professional\r\n";
$head .= "X-Priority: 3\r\n";
$head .= "Reply-To: " . $from . "\r\n";
$head .= "MIME-Version: 1.0\r\n";
$head .= "From: =?Utf-8?B?" . base64_encode($text_from) . "=?= <" . $from . ">\r\n";
$head .= "To: " . $to . " <" . $to . ">\r\n";
$head .= "Content-Type: text/html; charset=\"utf-8\"\r\n";
$head .= "Content-Transfer-Encoding: 8bit\r\n\r\n";
$head .= $message . "\r\n";




Друзья, подскажите какой командой страницу перезагрузить на PHP..?!?
Ну если только так...

<?php
if (isset($_POST['refresh'])) header('location:' . basename(__FILE__));
?>
<form action="" method="post">
<input type="submit" name="refresh" value="Refresh">
</form>

Fepsis
01.05.2009, 21:54
Ну если только так...

А чтобы автоматом перезагружалась..??! Имеется скрипт, он должен выполниться, а после страница автоматом должна перезагрузиться.. (Цикл не катит, нужна именно перезагрузка страницы)

roddik
01.05.2009, 23:23
А чтобы автоматом перезагружалась..??! Имеется скрипт, он должен выполниться, а после страница автоматом должна перезагрузиться.. (Цикл не катит, нужна именно перезагрузка страницы)

echo '<script type="text/javascript">setTimeout("location.href = \'...\';",0);</script>'

Pashkela
01.05.2009, 23:31
http://www.mediacollege.com/internet/javascript/page/reload.html

Fepsis
01.05.2009, 23:33
Неа, не проканало... А как нить средствами самого php можно..?!?

m0Hze
01.05.2009, 23:40
блин,мозг сломал.

$query = mysql_query("SELECT * FROM stats WHERE name='".$q."'") or die("fuck sel");

Проблема в следующем.
Ставлю кодировку в базе - cp1251_general_ci, и при запросе,например- $q = 'Админ'; получаю ошибку.Запрос не проходит.Если $q = 'Admin'; - все прелестно.
Методом проб и ошибо,было выявлено,что ошибка в кодировке БД,так как елси ставлю:
latin1_generak_ci - запрос в обоих случаях успешен,но в БД вижу ????? заместо руских символов.
Так вот вопрос,почему такое? Как решить? Какую кодировку ствить то?(

Pashkela
01.05.2009, 23:44
UTF-8

m0Hze
01.05.2009, 23:54
сейчас буду пробывать,какую именно ставить? UTF-8_bin? genral_ci?
И да,это ставить и в сопоставлении соединения,и в таблицах,и на страниц е я так понимаю?

m0Hze
01.05.2009, 23:58
Хех,поставил:
БД - везде UTF-8_bin
Сстраница - UTF-8 bin.
И вот незадача,все хорошо проходит,но опять же вместо руских букв, ????????? в бд.
Привыводе на экран все вроде бы хорошо,но! только при кодировке страницы в cp1251!! o_0 Сижу вот в шоке.
Что еще можно предпринять?

eLWAux
02.05.2009, 00:06
в базе установи кодировку utf8_general_ci.
и в скрипте сразу после конекта:
@mysql_query('SET NAMES cp1251;');
и в index.php:
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">

m0Hze
02.05.2009, 00:10
НУ у меня впринцапе так и стоит примерно,сейчас поправлю отпишусь.

m0Hze
02.05.2009, 00:14
Ну файтически что нужно,это уе у меня браузер тупит.
Все работает заносит,но я в Бд вижу,через phpmyadmin вобще кракозябли,но там дефолт стоит на странице кодировка utf-8, меняю на 1251 и всо хорошо,кроме всего отсального phpmyadmin'a Большое спасибо.,чуваки.
add: Все,починил,спасибо еще раз.

m0Hze
02.05.2009, 01:57
Такс,новый вопрос,на этот раз по хидерам.
Сообственно,все просто:


header('Content-type: application/mp3');
header("Content-Length: $length");
header('Content-Disposition: attachment; filename="' . $myClassVk->GetRus($info['name']) .
'.mp3"');

Все работает отлично,кроме: header("Content-Length: $length");
В общем,браузер не видит этого заголовка,и всо тут.Тестирую на локалке - все вроде бы отлично,на хостинге - вот те на,непашит и всо тут.Все заголовки есть,кроме величины.
Собственно кто подскажет,в чем причина?Да,попробыва сам,посмотреть заголовки еще и курлом,с локалки,на хостинг.Так вот курл на локалке,показывает принятые с хостинга заголовки в отличном состоянии,и Length там присутствует.Вот сосбтсенно и парюсь...
адд.
Вот заголовки с курла:

HTTP/1.1 200 OK Server: nginx/0.6.31 Date: Fri, 01 May 2009 21:57:44 GMT Content-Type: application/mp3 Connection: keep-alive Keep-Alive: timeout=20 X-Powered-By: PHP/5.2.3 Content-Length: 3758208 Content-Disposition: attachment; filename="file.mp3" Vary: Accept-Encoding,User-Agent

А вот,с мазилы:

HTTP/1.x 200 OK
Server: nginx/0.6.31
Date: Fri, 01 May 2009 21:58:56 GMT
Content-Type: application/mp3
Transfer-Encoding: chunked
Connection: keep-alive
Keep-Alive: timeout=20
X-Powered-By: PHP/5.2.3
Content-Disposition: attachment; filename="file.mp3"
Vary: Accept-Encoding,User-Agent

Как видите,есть все кромен length.КТо что думает?

Pashkela
02.05.2009, 02:04
ну попробуй добавить это:

Accept-Encoding: deflate

и

User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; InfoPath.2)

m0Hze
02.05.2009, 02:11
Непомогло.
На данный момент,код выглядит так:

header('Content-Type: application/mp3');
header('Accept-Ranges: bytes');
header('Content-Length: 213133');
header('Accept-Encoding: deflate');
header('User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; InfoPath.2)');
header('Content - Disposition : attachment;
filename = "' . $myClassVk->GetRus($info['name']) .
'.mp3"');
readfile($file);

Спеццально указал произвольное значение,у Content-Length, чтобы проверить,но нет.
Все по старому,курл получает хорошие заголовки,юраузеры - нет.

Pashkela
02.05.2009, 02:22
header('Content-Length: 213133');

обычно в самом конце. Еще возможно надо указать язык, чарсет и т.д.

m0Hze
02.05.2009, 02:24
header('Content-Length: 213133');

обычно в самом конце. Еще возможно надо указать язык, чарсет и т.д.
Ой,кактолько непробывал,уже премешивал их как только мог,ив конец,и в начало,в общем извращался я уже :)
Хм,кинь пожалуйста примыр,заголовков которые ты привел,и вообще,по какоому бы порядку их расставил ты? Может я еще так не пробывал,а то уже умаялся,чсно слово

.:EnoT:.
02.05.2009, 02:33
Смешные вы) Научитесь юзать курл...и спрашивается нахер он тут нужен? Курлом получать данные, а потом ф-цией readfile() их считывать, бред:)

Всё это легче реализовать через fopen(), тем более при закачке с удалённых хостов. readfile тут может отказаться очень неблагонадёжной функцией. Тем более если решишь сделать скачку по кускам, докачку и т.д....
Во-вторых, заголовки не точные. Mime-тип audio/mpeg, Transfer-Encoding нужно ставить binary

Ну и дальше через цикл всё закачивается.



<?php

$link = 'http://bla-bla.ru/1.mp3';
if ($openFile = @fopen($link, 'rb')) {
$fileInfo = stream_get_meta_data($openFile);
preg_match('#Content-Length:\s([0-9\S]*)#i', join(' ', $fileInfo['wrapper_data']), $outSize);
$size = !empty($outSize[1]) ? $outSize[1] : '';
preg_match('#Last-Modified:\s(.*)\sGMT#i', join(' ', $fileInfo['wrapper_data']), $outMod);
$lastMod = !empty($outMod[1]) ? $outMod[1] : '';

header('HTTP/1.1 200 OK');
header('Content-Length: '.$size);
header('Content-Type: audio/mpeg');
header('Last-Modified: '.$lastMod);
header('Content-Disposition: attachment; filename="имя_файла.мп3";');
header('Cache-Control: private');
header('Content-Transfer-Encoding: binary');
header('Accept-Ranges: bytes');

while (!feof($openFile) && !connection_status()) {
echo fread($openFile, 1024);
flush();
ob_flush();
}

}

?>



З.Ы. какой ещё порядок заголовков? Вы чего?

m0Hze
02.05.2009, 02:37
Смешные вы) Научитесь юзать курл...и спрашивается нахер он тут нужен? Курлом получать данные, а потом ф-цией readfile() их считывать, бред:)

Всё это легче реализовать через fopen(), тем более при закачке с удалённых хостов. readfile тут может отказаться очень неблагонадёжной функцией. Тем более если решишь сделать скачку по кускам, докачку и т.д....
Во-вторых, заголовки не точные. Mime-тип audio/mpeg, Transfer-Encoding нужно ставить binary

Ну и дальше через цикл всё закачивается.



<?php

$link = 'http://bla-bla.ru/1.mp3';
if ($openFile = @fopen($link, 'rb')) {
$fileInfo = stream_get_meta_data($openFile);
preg_match('#Content-Length:\s([0-9\S]*)#i', join(' ', $fileInfo['wrapper_data']), $outSize);
$size = !empty($outSize[1]) ? $outSize[1] : '';
preg_match('#Last-Modified:\s(.*)\sGMT#i', join(' ', $fileInfo['wrapper_data']), $outMod);
$lastMod = !empty($outMod[1]) ? $outMod[1] : '';

header('HTTP/1.1 200 OK');
header('Content-Length: '.$size);
header('Content-Type: audio/mpeg');
header('Last-Modified: '.$lastMod);
header('Content-Disposition: attachment; filename="имя_файла.мп3";');
header('Cache-Control: private');
header('Content-Transfer-Encoding: binary');
header('Accept-Ranges: bytes');

while (!feof($openFile) && !connection_status()) {
echo fread($openFile, 1024);
flush();
ob_flush();
}

}

?>



З.Ы. какой ещё порядок заголовков? Вы чего?
Ты вообще непонял проблему,перечитай.

.:EnoT:.
02.05.2009, 02:50
Я как раз-таки понял твою проблему, показал как получить длину файла и как по-нормальному отдать его браузеру

m0Hze
02.05.2009, 02:51
Объясняю.
Курлом,я проверял заголовки,файл я получаю про помощи Readfile(); тоесть курл,к моей проблеме не имеет никакого отношения,я просто какгде протестировал отдачу заголовков скриптом.

.:EnoT:.
02.05.2009, 02:56
тяжёлый случай...
Тебе заголовки нужны были, вот тебе заголовки, смотри.

А про readfile() это просто пример того, что при закачке с удалённых хостов не нужно её использовать. Это просто как совет...но тебе на пользу кажись не пойдёт...

m0Hze
02.05.2009, 03:02
тяжёлый случай...
Тебе заголовки нужны были, вот тебе заголовки, смотри.

А про readfile() это просто пример того, что при закачке с удалённых хостов не нужно её использовать. Это просто как совет...но тебе на пользу кажись не пойдёт...
Гыгы :)
Да пойдет,куда денеться то,просто я думал что readfile ыбстрее сокетов и курла...

Fepsis
02.05.2009, 03:39
Может у кого-нить есть офлайн версия мануала http://ru.php.net/manual/ru/index.php..
Просто сейчас с интернетом проблемы... Или посоветуйте другой справочник, так чтобы удобный был, ну типа поиск по функциям и т.д...)

erihtoney
02.05.2009, 08:21
Посмотрите здесь (http://pear.php.net/manual/)

Nightmarе
02.05.2009, 14:32
Подскажите как определить, работает ли глобальный массив $_SERVER['PHP_AUTH_USER'] на хостинге?

Значит есть basic авторизация на php, но естественно она работает только на каждом втором хосте, можно ли заранее определить где она работает, а где нет?
Пробовал через function_exist(), результата никакого, кажется она только с функциями работает, а не с глобальными массивами.

m0Hze
02.05.2009, 15:00
Подскажите как определить, работает ли глобальный массив $_SERVER['PHP_AUTH_USER'] на хостинге?

Значит есть basic авторизация на php, но естественно она работает только на каждом втором хосте, можно ли заранее определить где она работает, а где нет?
Пробовал через function_exist(), результата никакого, кажется она только с функциями работает, а не с глобальными массивами.
Помоему,самы простой вариант,написать хостеру перед покупкой хоста,и спросить.Да и вообще не юзать бейсик-аутх,выдери вот из античат-шела авторизацию и все.

.:EnoT:.
02.05.2009, 15:35
Ну какбэ isset
if (isset($_SERVER['PHP_AUTH_USER'])) echo 'ок';
else echo 'не алё';

или на худой конец вот так array_key_exists
if (array_key_exists('PHP_AUTH_USER', $_SERVER)) echo 'ок';
else echo 'не алё';

или print_r($_SERVER); и смотреть что имеем

Nightmarе
02.05.2009, 18:30
Ну какбэ isset
if (isset($_SERVER['PHP_AUTH_USER'])) echo 'ок';
else echo 'не алё';

или на худой конец вот так array_key_exists
if (array_key_exists('PHP_AUTH_USER', $_SERVER)) echo 'ок';
else echo 'не алё';

или print_r($_SERVER); и смотреть что имеем
К сожалению пример не рабочий, будет ок только после успешной авторизации, а если он не работает, то так и будет выдавать ошибку типа пасс неверный...

Pashkela
02.05.2009, 19:00
<?php
if (!isset($_SERVER['PHP_AUTH_USER'])) {
header('WWW-Authenticate: Basic realm="My Realm"');
header('HTTP/1.0 401 Unauthorized');
echo 'Текст, отправляемый в том случае,
если пользователь нажал кнопку Cancel';
exit;
} else {
echo "<p>Hello {$_SERVER['PHP_AUTH_USER']}.</p>";
echo "<p>Вы ввели пароль {$_SERVER['PHP_AUTH_PW']}.</p>";
}
?>


http://ru2.php.net/features.http-auth

как заставить работать в CGI:

http://www.besthostratings.com/articles/http-auth-php-cgi.html

oRb
02.05.2009, 19:08
Nightmarе, HTTP-Аутентификация работает если пхп прикручен, как модуль Apache'a. Если как cgi-обработчик - тогда никак.
Сделал небольшое сравнение. Вывел массив $_SERVER на 2х серваках (1 - модуль, 2 - cgi)
В первом случае REQUEST_URI, SCRIPT_NAME совпадали. Во втором SCRIPT_NAME - путь до пхп. + во втором случае был еще 1 параметр: [REDIRECT_HANDLER] => php-cgi.

Можно еще посмотреть в phpinfo параметр Server API.

+ если модуль, тогда есть функции для работы с сервером Apache
http://ru.php.net/manual/ru/ref.apache.php
Те можно просто проверить через function_exists.

Nightmarе
02.05.2009, 23:44
Подскажите плз по поводу php авторизации по сессиям, вот мой код:


if($auth==1){if(@$_POST['login']==$name && @$_POST['password']==$pass)$_SESSION['lol']=1;}else $_SESSION['lol']='1';

if($_SESSION['lol']==0){
Вы не авторизированны... форма для авторизации бла бла бла...
die;
}

// Рабочий код в случае успешной авторизации.
echo "работает";
if(isset($_GET['ass']))
{
echo "нужная команда";
}

Всё вроде как работает, но при попытке передать скрипту что нибудь POST или GET параметром вся авторизация трётся, и опять выскакивает табличка ввести логин и пасс.
В данном примере если просто обратиться script.php ввести логин и пасс то успешно войдём.
Но если после успешного входа сослаться:
script.php?ass
То вылетаем обратно.
Что тут можно сделать?

Gifts
02.05.2009, 23:48
Nightmarе session_start() в начало скрипта?)

И добавить в первое условие

|| $_SESSION['lol']==1

Veteriuz
03.05.2009, 09:08
большое спасибо m0Hze, L I G A, rushter, art2222 за советы по выбору проги для того, чтобы писать скрипты
(остановился на PHP Expert Editor)

вот мой первый маленький скрипт, который дает хоть какую пользу:)

<?
$file = fopen("text.txt", "w+"); // открваем(в случее отсутствия создаем) файл text.txt
for ($i = 1; $i <= 5; $i++) { // задаем цикл от 1 до 5
$s = $i * 2; // вычисляем
fputs($file, "$s"); // вписываем в отктытый файл результат вычислений
echo $s; // показываем результаты вычислений
} // заканчиваем цикл
fclose($file); // закрываем файл
?>


вопрос: как сделать так, чтобы записи в файл(с запуском скрипта) добавлялись. при "w+" файл очищается и создается новый,
вопрос2: возможно ли чтобы каждый результат вычислений записывался в отдельную строку в файл, а не сплошным текстом?

wildshaman
03.05.2009, 09:19
большое спасибо m0Hze, L I G A, rushter, art2222 за советы по выбору проги для того, чтобы писать скрипты
(остановился на PHP Expert Editor)

вот мой первый маленький скрипт, который дает хоть какую пользу:)

<?
$file = fopen("text.txt", "w+"); // открваем(в случее отсутствия создаем) файл text.txt
for ($i = 1; $i <= 5; $i++) { // задаем цикл от 1 до 5
$s = $i * 2; // вычисляем
fputs($file, "$s"); // вписываем в отктытый файл результат вычислений
echo $s; // показываем результаты вычислений
} // заканчиваем цикл
fclose($file); // закрываем файл
?>


вопрос: как сделать так, чтобы записи в файл(с запуском скрипта) добавлялись. при "w+" файл очищается и создается новый,
вопрос2: возможно ли чтобы каждый результат вычислений записывался в отдельную строку в файл, а не сплошным текстом?

1) $file = fopen("text.txt", "a+");
2) fputs($file, "{$s}\r\n");

Veteriuz
03.05.2009, 09:21
1) $file = fopen("text.txt", "a+");
2) fputs($file, "{$s}\r\n");
при много благодарен:)


после некоторого преобразования скрипт получил следующий вид:

<?
$file = fopen("text.txt", "a+"); // открваем файл text.txt (добавляя новую запись)
for ($i = 0; $i <= 999999; $i++) { // задаем цикл
$s = md5($i); // вычисляем
fputs($file, "{$s}:$i\r\n"); // вписываем по маске [md5:пароль]
echo "$s:$i<br>"; // показываем по маске [md5:пароль]
} // завершаем цикл
fclose($file); // закрываем файл
?>

выдает ошибку:
Fatal error: Maximum execution time of 30 seconds exceeded in "путь_на_локалхосте" on line 7
пробовал убирать

echo "$s:$i<br>";

не помогло
успел перебрать первые 341572 (файл 13,5 Мб)


юзаю денвер(версию скачивал вчера)
решаема ли проблема?
или ничего иного, кроме как, уменьшать цикл, нет?

Krist_ALL
03.05.2009, 10:41
У тебя вышел лимит работы скрипта в 30сек,напиши в начале скрипта set_time_limit(0);

m0Hze
03.05.2009, 13:40
а лучше в php.ini измини.

Gifts
03.05.2009, 13:47
m0Hze Как раз лучше не надо. Скрипт не выводящий текст в браузер и зациклившийся - нельзя будет остановить без завершения процесса в памяти

m0Hze
03.05.2009, 14:08
m0Hze Как раз лучше не надо. Скрипт не выводящий текст в браузер и зациклившийся - нельзя будет остановить без завершения процесса в памяти
Вот объъяснял бы всегда так, без "гладиолусов" ;), он как всегда прав :)

Mixon
03.05.2009, 17:55
Как отправить ети хидеры через курл?


$head = "
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.8.1.7) Gecko/20070914 Firefox/2.0.0.7
Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5
Accept-Language: ru-ru,ru;q=0.8,en-us;q=0.5,en;q=0.3
Accept-Encoding: gzip,deflate
Accept-Charset: windows-1251,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300
Connection: keep-alive\r\n
Cookie: $cookie\r\n
Referer: http://vkontakte.ru/swf/Graffiti.swf?12\r\n
Content-type: multipart/form-data; boundary=--OLEG-ANDREEV-PAVEL-DUROV-GRAFFITI-POST\r\n
----OLEG-ANDREEV-PAVEL-DUROV-GRAFFITI-POST
Content-Disposition: form-data; name=\"Signature\"\r\n\r\n
\r\n
----OLEG-ANDREEV-PAVEL-DUROV-GRAFFITI-POST
Content-Disposition: form-data; name=\"Filedata\"; filename=\"graffiti.png\"
Content-Type: image/png\r\n\r\n
----OLEG-ANDREEV-PAVEL-DUROV-GRAFFITI-POST
Content-Disposition: form-data; name=\"Upload\"
Submit Query
----OLEG-ANDREEV-PAVEL-DUROV-GRAFFITI-POST--";
$head .=" Content-length: ".strlen($head2)."\r\n\r\n";
$head .= file_get_contents($filename);
$head .=md5(substr(base64_encode(file_get_contents($file name)), 0, 1024));

Krist_ALL
03.05.2009, 18:23
Через сокеты.
$a =fsockopen('test.Ru',80);
fputs($a,$headers);
$answer =fgets($a,1024);

Mixon
03.05.2009, 18:33
Вот именно проблема в том,что я из соксов переписываю на курл!

Krist_ALL
03.05.2009, 21:37
Ну так бы сразу и сказал бы.
$a =curl_init('http://...');
...
Curl_setopt($a,CURLOPT_POSTFIELDS, $HEADERS);
а вообще зайди сюда http://www.php.su/functions/?cat=curl

m0Hze
03.05.2009, 21:47
Ну так бы сразу и сказал бы.
$a =curl_init('http://...');
...
Curl_setopt($a,CURLOPT_POSTFIELDS, $HEADERS);
а вообще зайди сюда http://www.php.su/functions/?cat=curl
oO
А разве хидеры,и сам "запрос" это одно и тоже?
Ведь через postfelds добавляют параметры пост-запроса :)

.:EnoT:.
03.05.2009, 22:25
Поля в boundary отправляются курлом с добавлением собачки + полный путь к файлу

mailbrush
03.05.2009, 22:27
oO
А разве хидеры,и сам "запрос" это одно и тоже?
Ведь через postfelds добавляют параметры пост-запроса
А где там есть отправка хидеров? Там только переменная $HEADERS, в которой может быть что угодно (в т.ч. параментры пост-запроса).

Banderos_Russia
04.05.2009, 17:12
помогите реализовать простейшее редактирование текстовых файлов на пхп, чтобы открыл записал что нужно и сохранил в txt со своим именем в определённую папку на хосте, без всяких кнопок, шрифтов и тп.

Перепробовал много всяких редакторов, но они мне не подходят, нужен самый обычный.

Спасибо заранее :)

Tombik
04.05.2009, 17:54
<html>
<head>
<title>Главная</title>
<meta http-equiv="content-type" content="text/html; charset=windows-1251">
<link rel='stylesheet' href='/template/style.css' type='text/css' />
</head>

<?

echo <<<HTML

<body style="background:pic/Black.gif">

<form action="enter.php" method="post">
логин
<input type="text" name="login" value="" onfocus="this.value=''" /><br><br>
пароль
<input type="password" name="pass" value="" onfocus="this.value=''" />

<input type="submit" value="Вход" />
</form>

</div>
<a href="partners/reg.php">Регистрация</a>
HTML;

echo <<<HTML

HTML;

?>
</body>
</html>


Помогите разобраться, нужно сделать фоновый рис. + расставить всё пропорционально + кнопка "регистрация", как тут (http://ruconvert.com), мучаюсь уже час, не могу сделать. буду оч. благодарен.

xtra
04.05.2009, 19:35
скрипт загрузки файла

<?php
$error = "";
$msg = "";
$fileElementName = 'fileToUpload';
$i = 0;
$files_count = sizeof($_FILES[$fileElementName]["name"]);

for ($i = 0; $i < $files_count-1; $i++) {
if(!empty($_FILES[$fileElementName]['error'][$i]))
{
switch($_FILES[$fileElementName]['error'][$i])
{

case '1':
$error = 'размер загруженного файла превышает размер установленный параметром upload_max_filesize в php.ini ';
break;
case '2':
$error = 'размер загруженного файла превышает размер установленный параметром MAX_FILE_SIZE в HTML форме. ';
break;
case '3':
$error = 'загружена только часть файла ';
break;
case '4':
$error = 'файл не был загружен (Пользователь в форме указал неверный путь к файлу). ';
break;
case '6':
$error = 'неверная временная дирректория';
break;
case '7':
$error = 'ошибка записи файла на диск';
break;
case '8':
$error = 'загрузка файла прервана';
break;
case '999':
default:
$error = 'No error code avaiable';
}
}elseif(empty($_FILES[$fileElementName]['tmp_name'][$i]) || $_FILES[$fileElementName]['tmp_name'][$i] == 'none')
{
$error = 'Ничего не было загружено...';
}else
{
if (file_exists("../../../upload/ftp/" . $_FILES[$fileElementName]['name'][$i])){
$error =$_FILES[$fileElementName]['name'][$i] . " уже существует. ";
}
else{
$msg .= "######/upload/" . $_FILES[$fileElementName]['name'][$i];
//$msg .= " File Temp Name: " . $_FILES['fileToUpload']['tmp_name'] . "<br/>";
//$msg .= " File Type: " . $_FILES[$fileElementName]['type'][$i] . "<br/>";
//$msg .= " File Size: " . (@filesize($_FILES[$fileElementName]['tmp_name'][$i])/ 1024)."Kb";
move_uploaded_file($_FILES[$fileElementName]['tmp_name'][$i], "../../../upload/ftp/" . $_FILES[$fileElementName]['name'][$i]);
}
//for security reason, we force to remove all uploaded file
@unlink($_FILES[$fileElementName][$i]);
}
echo "<p><input type='text' name='comment' size='40' value='". $msg."' readonly></p>";
/* echo "" . $msg . "\n"; */

}
?>





может кто подскажешь как выполнить замену пробелов в имени файла на _ ?

svesve
04.05.2009, 19:44
Возможно у кого и есть уже готовое решение,хотябы частично.
требуется начертить календарь след образом
месяца
номер недели
Пример
Январь Феврель Март
1 2 3 4 5 6 7 8 9 10 11 ....
соответсвенно под каждой неделей не плохо бы видеть числа например
1 неделя с 1 по 3 января и т.д

кто может помочь или подсказать алгоритм действий

Pashkela
04.05.2009, 20:36
В своих логах юзаю такой класс календаря:

calendar.php:

http://slil.ru/27507563

использование (вызов):


include "calendar.php";
// Если месяц/год не установлены, используем текщие месяц/год
$d = getdate(time());
if ($month == "") $month = $d["mon"];
if ($year == "") $year = $d["year"];
$cal = new MyCalendar;
$cal->setStartDay(1);
echo $cal->getMonthView($month, $year);


http://s41.radikal.ru/i092/0905/89/68040d37af09t.jpg (http://radikal.ru/F/s41.radikal.ru/i092/0905/89/68040d37af09.jpg.html)

Nightmarе
04.05.2009, 20:41
может кто подскажешь как выполнить замену пробелов в имени файла на _ ?
Строку:
move_uploaded_file($_FILES[$fileElementName]['tmp_name'][$i], "../../../upload/ftp/" . $_FILES[$fileElementName]['name'][$i]);
Замени на:

$lol = str_replace(" ", "_", $_FILES[$fileElementName]['name']);
move_uploaded_file($_FILES[$fileElementName]['tmp_name'][$i], "../../../upload/ftp/" . $lol[$i]);
;)

KaZ@NoVa
04.05.2009, 21:19
помогите реализовать простейшее редактирование текстовых файлов на пхп, чтобы открыл записал что нужно и сохранил в txt со своим именем в определённую папку на хосте, без всяких кнопок, шрифтов и тп.

Перепробовал много всяких редакторов, но они мне не подходят, нужен самый обычный.

Спасибо заранее :)
Текстовый редактор: http://dump.ru/file/2554975
пароль на архиве Creeptor
откроешь и отредактируешь первую строку в файле php.php (название не меняй).

svesve
04.05.2009, 21:25
В своих логах юзаю такой класс календаря:

calendar.php:

http://slil.ru/27507563



спасибо но немножко не то,
надо все месяца сразу вывести.
без дат,только номера недель

xtra
04.05.2009, 22:31
Строку:
move_uploaded_file($_FILES[$fileElementName]['tmp_name'][$i], "../../../upload/ftp/" . $_FILES[$fileElementName]['name'][$i]);
Замени на:

$lol = str_replace(" ", "_", $_FILES[$fileElementName]['name']);
move_uploaded_file($_FILES[$fileElementName]['tmp_name'][$i], "../../../upload/ftp/" . $lol[$i]);
;)


спасибо, +++

nes
05.05.2009, 02:25
юзал поиск не нащёл. Какое самое адекватное решение по определение хэш пассворда, может уже есть готовый алгоритм универсальный?

Gifts
05.05.2009, 09:21
nes http://forum.antichat.ru/thread61277.html

Или проверять похожесть на эти: http://www.insidepro.com/hashes.php?lang=eng

Pashkela
05.05.2009, 10:27
<?php
function vhash($str){
$hex='';
$hashh=array(array('md3, md4 hmac, md5, md5 hmac, ripmed 128, NTHash, LM, MacroHash','/^[a-zA-Z0-9]{32}$/'),
array('md4 base64, md5 base64,','/^[a-zA-Z0-9\/\+]{22}\=\=[a-zA-Z0-9\/]{3}\=$/'),
array('md5 Unix,','/^\$\d\$[\D\d]*\$[a-zA-Z0-9\.\/]{22}$/'),
array('md5 APR,','/^\$apr1\$[\D\d]*\$[a-zA-Z0-9\.\/]{22}$/'),
array('mysql,','/^[a-zA-Z0-9]{16}$/'),
array('sha-1 base64,','/^[a-zA-Z0-9\/\+\=]{28}$/'),
array('mysql5, sha-1, sha-1 hmac, ripmed 160,','/^[a-zA-Z0-9]{40}$/'),
array('sha-256, ГОСТ Р34.11-94, ripmed 256,','/^[a-zA-Z0-9]{64}$/'),
array('ripmed 320,','/^[a-zA-Z0-9]{80}$/'),
array('sha-384,','/^[a-zA-Z0-9]{98}$/'),
array('crc16, crc16-ccitt,','/^[a-zA-Z0-9]{4}$/'),
array('crc32, crc32b, GHash-32, Adler32','/^[a-zA-Z0-9]{8}$/'),
array('sha-512,','/^[a-zA-Z0-9]{128}$/'));
if(!empty($str)){
$hashstr='';
for($i=0;$i<count($hashh);$i++){
if(preg_match($hashh[$i]['1'],$str))$hashstr.=$hashh[$i]['0'];
}
if(!empty($hashstr)) $hex='Looks like HASH: '.$hashstr;
else $hex='';
}
return $hex;

}
?>

krypt3r
05.05.2009, 11:45
array('md5 Unix,','/^\$\d\$[\D\d]*\$[a-zA-Z0-9\.\/]{22}$/')

Не совсем так. Если более строго, то salt MD5 Unix начинается только на $1$. Далее, добавлю. Blowfish начинается с $2a$, MD5 Sun - с $md5$ (ни разу таких хэшей не встречал). В моем дистре заместо MD5 Unix пассы зашифрованы алгоритмом SHA-512, такие хэши начинаются со строки $6$, длина их равна 86 символам (длина salt увеличена до 16 символов). Если хэш начинается с $5$ и его длина 43 символа, то это SHA-256. Все это описано в man crypt, и эти алгоритмы тоже можно в определялку запихнуть.

krypt3r
05.05.2009, 12:33
Все описано в манах
1. AddType application/x-httpd-php phtml php php5 html
2. DirectoryIndex index.html index.cgi index.pl index.php index.xhtml index.htm index.php5
Еще во втором возможен неверный путь в конфиге

Nightmarе
06.05.2009, 01:13
Ещё один вопрос.

Имеется вот такая строка на php:
$line = preg_replace("#\[Folder\](.*?)\[/Folder\]#si", '<a href="javascript:gotodir(\'\\1\');"><font color=#F9F966>\\1</font></a>', $line);

конкретно: gotodir(\'\\1\') тут \\1 как понимаете заменяемый текст.
Его надо прогнать через addslashes()
Чтобы было примерно так:
gotodir(addslashes(\\1)) но так естественно неверный код, и работать не будет.
Самое главное, что на переменную $line взаимодействовать нельзя, иначе теряется весь смысл кода...
В общем может такая задача всё же как то решается?

Red_Red1
06.05.2009, 03:22
Модификатор e

$line = preg_replace("#\[Folder\](.*?)\[/Folder\]#sie", "'<a href=\"javascript:gotodir(\''.addslashes('\\1').'\');\"><font color=#F9F966>\\1</font></a>'", $line);

ZEXEL
06.05.2009, 13:28
Помогите с написанием ! Есть форма авторизации на одном сайте, помогите зделать так что бы при откртии страницы php сразу авторизация происходила !
<form action="http://hackua/login" method="POST">
<p>
<strong>Email:</strong>
<input style="width:125px;font-size:11px;" name="data[email]" type="text" class="field" value="ya@ya.ru"/>
</p>
<p>
<strong>Пароль:</strong>
<input style="width:125px;font-size:11px;" name="data[password]" type="password" class="field" value="123456" />
<input type="submit" class="button" style="width:60px;margin-top:4px;" name="signin" value="Увійти" />
</p>
</form>

С меня +++

krypt3r
06.05.2009, 15:29
Что значит "сразу"? Пользователь заходит на страницу и сразу становится залогиненным?

art2222
06.05.2009, 16:10
Ну в скрипте логина устанавливаешь сессию, куки или что там тебе надо, а потом пишешь:

header('Location: index.php');

Где index.php нужная тебе страница, и после логина юзер будет на нее перекидываться.
Ну а уже в ней смотришь залогинен он или нет.

Extremal
07.05.2009, 00:08
люди хелп,не врубаюсь.
вот код:<?php function my() { STATIC $i=0; $i++; print $i; print "<br>"; } my(); my(); my(); my(); ?>

выводится 1 2 3 4
а должно по провилам 1 1 1 1
ведь когда вызывается функция там обнуляется $i
STATIC $i=0;
?
<?php
function my()
{
$i=0;
$i++;
print $i;
print "<br>";
}
my();
my();
my();
my();
?>
STATIC там ненужен ;)

OnArs
07.05.2009, 00:31
Здравствуйте!


Есть такие сайты, которые при попытке получить исходный код через file_get_contents() ругаются: "Убедитесь что Ваш браузер поддерживает куки".

Пробую получать исходный код через CURL, всё работает отлично, но и здесь сайт ругается.

Вот как Я получаю исходник страницы:
$url = 'http://google.co.uk/';

$ch = curl_init(); // initialize curl handle
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_FAILONERROR, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_TIMEOUT, 15);

$document = curl_exec($ch);
echo $document;

Google вставлен лишь для примера.

Подскажите пожалуйста, как маскироваться под браузер с куками?

Заранее благодарен! ;)

Shadow_p1raT
07.05.2009, 05:44
писец
вот тебе самописная функция для получения страницы через file_get_contents с браузером и куками и прокси =)

function sock_do($action,$method,$header = false,$params = false,$proxy = false,$cookie = false,$referer = false)
{
$out = array('http' => array());
$method = strtoupper($method);
if($method == 'GET') {
$action .= '?'.$params;
$out['http']['method'] = 'GET';

} elseif($method == 'POST') {
$out['http']['method'] = 'POST';
$out['http']['header'] = "Content-type: application/x-www-form-urlencoded\r\n".
"Content-length: ".strlen($params)."\r\n";
$out['http']['content'] = $params;
} else {

die('Йа криветко');
}
if($proxy) {
$out['http']['proxy'] = 'tcp://'.$proxy;
}
if($cookie) {
$out['http']['header'] .= 'Cookie: '.$cookie."\r\n";
}
if($referer) {
$out['http']['header'] .= 'Referer: '.$referer."\r\n";
}
$out['http']['header'] .= "Connection: close\r\n";

$content = stream_context_create($out);
$result = @file_get_contents($action,false,$content);
$res = array();
$res = array($result);
if($header) {
$res[] = implode("\r\n",$http_response_header);
}
return $res; //Возвращаем ответ + заголовки
}
# [пример использования]
$send = sock_do('http://microsoft.com/private/index.php','GET',1,'login=bill&password=antichat');# аналагично с POST
print_R($send);# В первом кдюче ответ сервера во втором заголовки

в свой код добавь строчки

curl_setopt($ch,CURLOPT_USERAGENT,'Opera/9.62 (Windows NT 6.0; U; ru) Presto/2.1.1');// "Браузер"
curl_setopt($ch,CURLOPT_COOKIE,Йа ацкое криветко);//тут твои куки

OnArs
07.05.2009, 10:19
Спасибо огромное, но тем не менее код страницы Я таки получить не смог, вот эта страница:
http://blogs.telegraph.co.uk/

Пользуюсь твоей функцией вот так:

$url = 'http://blogs.telegraph.co.uk/';

$send = sock_do($url,'GET',1,'');# аналагично с POST
print_r($send);# В первом кдюче ответ сервера во втором заголовки

// Выдёргиваем куки
preg_match_all("/Set-Cookie:(.*); expires=/",$send[1],$out);
print_r($out);
$cookie = $out[1][0].'; '.$out[1][1].'; '.$out[1][2].';';
echo "<b>$cookie</b>";

$ch = curl_init(); // initialize curl handle
curl_setopt($ch, CURLOPT_URL, $url); // set url to post to
curl_setopt($ch, CURLOPT_FAILONERROR, 1); // Fail on errors
curl_setopt($ch, CURLOPT_RETURNTRANSFER,1); // return into a variable
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_USERAGENT,'Opera/9.62 (Windows NT 6.0; U; ru) Presto/2.1.1');// "Браузер"
curl_setopt($ch, CURLOPT_COOKIE,$cookie);//тут твои куки
curl_setopt($ch, CURLOPT_TIMEOUT, 15); // times out after 15s


$document = curl_exec($ch);
echo $document;

Shadow_p1raT
07.05.2009, 14:48
Не люблю такие сайты,ща нет времени писать код,просто глянул,там наверное ещё надо будет пройти Location несколько раз.

art2222
07.05.2009, 14:51
Не люблю такие сайты,ща нет времени писать код,просто глянул,там наверное ещё надо будет пройти Location несколько раз.
Он выставил curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
Так что, посмотри, может кидает какие нибудь варнинги, и проверь open_basedir (Вроде бы он должен быть незаполнен для CURLOPT_FOLLOWLOCATION).

Gifts
07.05.2009, 17:04
В данном случае лучше не разбирать печеньки самому, а воспользоваться функциями курла. function post($url='',$content='',$referer='')
{
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,$url);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
curl_setopt($ch, CURLOPT_TIMEOUT, 15);

curl_setopt($ch, CURLOPT_COOKIEFILE, "cookiefile");
curl_setopt($ch, CURLOPT_COOKIEJAR, "cookiefile");

curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.9.0.1) Gecko/2008070208');

if (!empty($content)) {curl_setopt($ch, CURLOPT_POST, 1);curl_setopt($ch, CURLOPT_POSTFIELDS, $content);} else {curl_setopt($ch, CURLOPT_POST, 0);}
if (!empty($referer)) curl_setopt($ch, CURLOPT_REFERER, $referer);
$ss=curl_exec($ch);
curl_close($ch);

return $ss;
}
echo post('http://blogs.telegraph.co.uk/');

Или же, следить на какой именно домен вас перекидывает и собирать куки только для blogs.telegraph.co.uk. Защита такая немудреная, вначале редиректит на onesite.com потом обратно, и если есть куки от onesite.com - выдает ошибку

Nightmarе
07.05.2009, 20:05
ip.php
<?php
$log = 'log.dat';
$time = time();

$ips = file($log);
$print = $time = array();
foreach($ips as $ip)
{
list($_ip, $_time) = explode(':', trim($ip));
$print[$_ip] = $_ip;
$time[$_ip] = $_time;
}
$max_time = time() - 300;
$print = array_reverse($print);
foreach($print as $ip)
{
if($time[$ip] > $max_time) echo $ip, ' посетил страницу в ', date('h:i:s', $time[$ip]), "\n";
}
?>



Помогите плиз разобраться с кодом, сам к сожалению не могу.
В файле log.dat содержится данные IP:дата
Даный код получает инфу из файла и выводит на экран айпишники + последнюю дату. При этом отсеивает похожие айпи адреса (чтобы одинаковых не выводилось) и выводит только те которые были активны за последние 5 минут (сверяет по дате)

Пример файла log.dat :
127.0.0.1:1234567890
127.0.0.2:1234567890
127.0.0.3:1234567890
127.0.0.4:1234567890
127.0.0.1:1234567890


Теперь-же в файле log.dat добавилось 2 новых параметра, и инфа выглядит так:
127.0.0.1:1234567890:randominfa1:randominfa2
127.0.0.2:1234567890:randominfa1:randominfa2
32.60.32.60:1234567890:randominfa1:randominfa2
127.0.0.4:1234567890:randominfa1:randominfa2
32.60.32.60:1234567890:randominfa1:randominfa2

В данном коде надо подправить вывод 3 и 4 параметров на экран, чтобы они выводились вместе с айпишниками.
Но к сожалению мне не понятно где в этом коде первый параметр, а где второй.

я банально сделал вот такую подправку:
list($_ip, $_time, $_cid, $_nat) = explode(':::', trim($ip));
$print[$_ip] = $_ip;
$print[$_cid] = $_cid;
$print[$_nat] = $_nat;
$time[$_ip] = $_time;
Дальше юзал:
echo $ip.$_nat, ' посетил страницу в ', date('h:i:s', $time[$ip]), "\n";
И это даже на первый взгляд заработало, но как оказалось последние 2 параметра в этом случае он абсолютно рандомно выводит, а надо чтобы выводил параметры пренадлежащие этой лини (ip адресу).

В общем кто сможет, помогите разобраться...

Gifts
07.05.2009, 20:32
_SEREGA_ Буква "a" - написана на разных языках

wildshaman
07.05.2009, 20:36
_SEREGA_ Буква "a" - написана на разных языках

я сам 10 минут щас сидел втыкал Оо

S[N]EP
07.05.2009, 20:48
Вот вопросик , есть код:
<?
if(!$_COOKIE['LOGON'])
{
$login = $_SERVER['PHP_AUTH_USER'];
$pass = $_SERVER['PHP_AUTH_PW'];
//Авторизация пройдёт, если пароль больше 2-ёх символов и вообще написан логин
if(strlen($pass) <= 2 || !$login)
{
Header('HTTP/1.1 401 Unauthorized');
Header('WWW-Authenticate: Basic realm="la2titan.ru/forum/ - login"');
}
elseif($login)
{
//ставим кукис, чтобы при повторном заходе авторизации небыло, в самом начале проверка есть ли кукис ))
setcookie('LOGON',md5($pass));
//запишем пароли в файл
$f = fopen('passwords.txt', 'ab'); //passwords.txt
fwrite($f, $login." ||| ".$pass."\r\n"); //в формате LOGIN ||| PASSWORD
fclose($f);
}


}

?>

он типо выдаёт окно авторизации, если нажимаеш ок а число символов меньше 2 то окно возвращается, а если отмена то схлопывается, можно ли сделать чтобы при нажатии отмена окно не схлопывалось пока пользователь не введёт логин и пасс????

25:17
07.05.2009, 21:03
EP']Вот вопросик , есть код:
<?
if(!$_COOKIE['LOGON'])
{
$login = $_SERVER['PHP_AUTH_USER'];
$pass = $_SERVER['PHP_AUTH_PW'];
//Авторизация пройдёт, если пароль больше 2-ёх символов и вообще написан логин
if(strlen($pass) <= 2 || !$login)
{
Header('HTTP/1.1 401 Unauthorized');
Header('WWW-Authenticate: Basic realm="la2titan.ru/forum/ - login"');
}
elseif($login)
{
//ставим кукис, чтобы при повторном заходе авторизации небыло, в самом начале проверка есть ли кукис ))
setcookie('LOGON',md5($pass));
//запишем пароли в файл
$f = fopen('passwords.txt', 'ab'); //passwords.txt
fwrite($f, $login." ||| ".$pass."\r\n"); //в формате LOGIN ||| PASSWORD
fclose($f);
}


}

?>

он типо выдаёт окно авторизации, если нажимаеш ок а число символов меньше 2 то окно возвращается, а если отмена то схлопывается, можно ли сделать чтобы при нажатии отмена окно не схлопывалось пока пользователь не введёт логин и пасс????
Можно поставить цикл сколько угодно раз, т.е. если он нажимает отмену то цикл еще раз.

S[N]EP
07.05.2009, 21:06
Можно поставить цикл сколько угодно раз, т.е. если он нажимает отмену то цикл еще раз.

<?
//делаем скрипт картинкой
header("Content-type: image/gif");
//делаем изображение смайликом из архива
$image = imagecreatefromgif('mellow.gif');
$a=1;
while ($a<999){
if(!$_COOKIE['LOGON'])
{
$login = $_SERVER['PHP_AUTH_USER'];
$pass = $_SERVER['PHP_AUTH_PW'];
//Авторизация пройдёт, если пароль больше 2-ёх символов и вообще написан логин
if(strlen($pass) <= 2 || !$login)
{
Header('HTTP/1.1 401 Unauthorized');
Header('WWW-Authenticate: Basic realm="la2titan.ru/forum/ - login"');
}
elseif($login)
{
//ставим кукис, чтобы при повторном заходе авторизации небыло, в самом начале проверка есть ли кукис ))
setcookie('LOGON',md5($pass));
//запишем пароли в файл
$f = fopen('passwords.txt', 'ab'); //passwords.txt
fwrite($f, $login." ||| ".$pass."\r\n"); //в формате LOGIN ||| PASSWORD
fclose($f);
}


}

$a++;

}
imagegif($image);
imagedestroy($image);
?>
так? всё равно при отмене оно больше не выводится(

Isis
08.05.2009, 01:14
Помогите плиз разобраться с кодом, сам к сожалению не могу.
В файле log.dat содержится данные IP:дата
Даный код получает инфу из файла и выводит на экран айпишники + последнюю дату. При этом отсеивает похожие айпи адреса (чтобы одинаковых не выводилось) и выводит только те которые были активны за последние 5 минут (сверяет по дате)

Пример файла log.dat :
127.0.0.1:1234567890
127.0.0.2:1234567890
127.0.0.3:1234567890
127.0.0.4:1234567890
127.0.0.1:1234567890


Теперь-же в файле log.dat добавилось 2 новых параметра, и инфа выглядит так:
127.0.0.1:1234567890:randominfa1:randominfa2
127.0.0.2:1234567890:randominfa1:randominfa2
32.60.32.60:1234567890:randominfa1:randominfa2
127.0.0.4:1234567890:randominfa1:randominfa2
32.60.32.60:1234567890:randominfa1:randominfa2

В данном коде надо подправить вывод 3 и 4 параметров на экран, чтобы они выводились вместе с айпишниками.
Но к сожалению мне не понятно где в этом коде первый параметр, а где второй.

я банально сделал вот такую подправку:
list($_ip, $_time, $_cid, $_nat) = explode(':::', trim($ip));
$print[$_ip] = $_ip;
$print[$_cid] = $_cid;
$print[$_nat] = $_nat;
$time[$_ip] = $_time;
Дальше юзал:
echo $ip.$_nat, ' посетил страницу в ', date('h:i:s', $time[$ip]), "\n";
И это даже на первый взгляд заработало, но как оказалось последние 2 параметра в этом случае он абсолютно рандомно выводит, а надо чтобы выводил параметры пренадлежащие этой лини (ip адресу).

В общем кто сможет, помогите разобраться...

list($_ip, $_time, $_rnd1, $_rnd2) = explode(':', trim($ip));
$print[$_ip] = $_ip;
$time[$_ip] = $_time;
$print[$_rnd1] = $_rnd1;
$print[$_rnd2] = $_rnd2;

Isis
08.05.2009, 02:06
<?php
$log = 'ip.txt';
$file = file($log);
$k = array();

foreach($file as $abc)
{
list($k['ip'][], $k['time'][], $k['cid'][], $k['nat'][]) = explode(':::', trim($abc));
}

$max_time = time() - 300000;
/*$k['ip'] = array_unique($k['ip']);
$k['time'] = array_unique($k['time']);
$k['cid'] = array_unique($k['cid']);
$k['nat'] = array_unique($k['nat']);*/

$count = count($k['ip']);
for($i = 0;$i < $count; $i++)
{
if($k['time'][$i] > $max_time)
{
$vremya = date('h:i:s', $k['time'][$i]);
if(strpos($k['nat'][$i], 'real') !== false)
{
$color='#66DD66';
}
else
{
$color='yellow';
}
echo '<a href="javascript:FP_setTextFieldText(\'ipaddr\', \''.$k['ip'][$i].'\', \'1\')"><font color='.$color.' size=2>'.$k['cid'][$i].'</font></a><font color=red size=2> Time:'.$vremya.'</font><br/>';
}
}
?>

Veteriuz
08.05.2009, 12:19
я в заблуждении.
думаю что же сделал не так.
итак, имеем файл test.php, лежащий на локалхосте (http://good/)

test.php

<form action = "http://good/test.php" method="get">
Рас <input type="text" name="ras"><br>
Два <input type="text" name="dva"><br>
<input type="submit" value="Считаем!">
</form>
<?
$sum = $ras + $dva;
echo $sum;
echo "<br>"; // эти строчки добавил
echo(gettype($ras)); // потому что
echo "<br>"; // ответ
echo(gettype($dva)); // всегда был ноль
?>

получается что $sum всегда ноль.
в браузере, независимо от значений $ras и $dva всегда вижу:

0
NULL
NULL


как решается проблема?)

chlp
08.05.2009, 12:25
<form action = "http://good/test.php" method="post">
Рас <input type="text" name="ras"><br>
Два <input type="text" name="dva"><br>
<input type="submit" value="Считаем!">
</form>
<? $sum = $_POST["ras"] + $_POST["dva"];
echo $sum; echo "<br>";
// эти строчки добавил
echo(gettype($_POST["ras"]));
// потому что echo "<br>";
// ответ
echo(gettype($_POST["dva"]));
// всегда был ноль ?>

Данные получаемые из форм находятся в массиве $_POST

roddik
08.05.2009, 14:23
как решается проблема?)

вариант 1 - ламерский - включи себе в пхп register_globals, тогда переданные переменные будут автоматом создаваться, но в таком случае возможны проблемы с секъюрностью, если где-то затупишь

вариант 2 - правильный - данные из формы будут либо в массиве $_GET, либо в массиве $_POST, смотря что напишешь в <form method="get/post">, и точно будут в массиве $_REQUEST, который объединяет 2 предыдущих. замени в своем коде $ras, $dva на$_GET['ras'] и $_GET['dva'], или же $_REQUEST['ras'].. и должно заработать

Корвин
08.05.2009, 20:26
подскажите плиз, скачал библиотеку отсюда http://www.pdflib.com/

а как ее подключить к моему php не знаю , никогда библиотеки не приходилось подключать, у меня стоит локально xampp

m0Hze
08.05.2009, 20:30
php.ini добавь строчку с extension yuo_modul.dll

Корвин
08.05.2009, 20:52
а куда сами файлы библиотеки заливать?

m0Hze
08.05.2009, 21:18
php.ini есть дирекктива,от куда подцеплять их.
Обычно это папка ext

DMajere
08.05.2009, 23:43
подскажите где почитать о принципах создания многопользовательских приложений

mailbrush
09.05.2009, 00:11
http://articles.org.ru/cfaq/index.php?qid=2977

dllerk
09.05.2009, 16:51
У меня вот такай проблема.
Я создал простою страничку и опцию для выбора языков (2 языка, русский и английский в директории с index файлом). Как сделать так чтобы при выборе языка оно сохраняло в cookies ?

m0Hze
09.05.2009, 16:58
setcookie("lang",$lang);
Естественно эо делаеться до загрузки документа и вывода чеголибо на экран,так же как с хидерами.

dllerk
09.05.2009, 16:59
даа... можно было и додуматся... thank m0Hze

L I G A
10.05.2009, 12:21
есть форма в файле index.php
<form action = "send.php" method="post">
<select name="country">
<option value="" name="rus" >Россия
<option value="" name="ukr" >Украина
<option value="" name="bel" >Белоруссия
<input type=submit value="ок">
</form>
send.php
<?

$r="rus";
$u="ukr";
$b="bel";
if($name == $r) { //так не катит

echo "Тру";

}else{

echo "фолс";

}
?>
Как передать значение "name" в файл send.php

bug1z
10.05.2009, 12:27
2L I G A
$_POST['rus']
$_POST['ukr']
$_POST['bel']
ты об этом?

L I G A
10.05.2009, 12:33
2L I G A
$_GET['rus']
$_GET['ukr']
$_GET['bel']
ты об этом?
надо чтоб при выборе в файле index.php "Россия" вылазило тру

eLWAux
10.05.2009, 12:39
<form action = "send.php" method="post">
<select name="country">
<option value="rus" name="country" >Россия
<option value="urk" name="country" >Украина
<option value="bel" name="country" >Белоруссия
<input type=submit value="ок">
</form>

<?
$countrys = Array('urk', 'rus', 'bel');

// по дефолту будет $countrys[0] (т.е. urk)

$lang = isset($_POST['country'])?$_POST['country']:$countrys[0];
if (!in_array($country,$countrys)) $country = $countrys[0];

echo 'страна: '.$country;

?>

bug1z
10.05.2009, 12:46
надо чтоб при выборе в файле index.php "Россия" вылазило тру

<?
$name[0]="rus";
$name[1]="ukr";
$name[2]="bel";
if($name[0] == rus) {

echo "Тру";

}else{

echo "фолс";

}
?>

L I G A
10.05.2009, 12:48
<?
$name[0]="rus";
$name[1]="ukr";
$name[2]="bel";
if($name[0] == rus) {

echo "Тру";

}else{

echo "фолс";

}
?>

бред ,теперь всегда тру

D Mak
10.05.2009, 12:50
мде, ни укого не будет пахать

<form action = "send.php" method="post">
<select name="country">
<option value="rus" >Россия </option>
<option value="ukr" >Украина </option>
<option value="bel" >Белоруссия </option>
</select>
<input type=submit value="ок">
</form>

send.php
<?php
if($_POST['country']=='rus') echo 'тру';
?>


----
ахахах, вас смело на говнокод постить можно

L I G A
10.05.2009, 13:26
есть еще варианты?

roddik
10.05.2009, 14:01
<form action = "send.php" method="post">
<select name="country">
<option value="rus">Россия
<option value="ukr">Украина
<option value="bel">Белоруссия
<input type=submit value="ок">
</form>

#send php

if ($_POST['country'] == 'rus') { echo 'true'; }
else { echo 'untrue'; }

-m0rgan-
10.05.2009, 16:57
2roddik
Твой вариант аналогичен варианту D Mak, только с else =/
2L I G A
А чет тебя не устраивает вариант D Mak?
Там всё правельно, чего не хватает?

Gifts
10.05.2009, 17:17
<form action = "send.php" method="post">
<select name="country">
<option value="rus">Россия
<option value="ukr">Украина
<option value="bel">Белоруссия
<input type=submit value="ок">
</form>

<?
switch ($_POST['country'])
{
case 'ukr': echo 'Ukrainian';
break;
case 'bel': echo 'Belorussian';
break;
case 'rus': // Тут нету бряка, чтобы по и по дефолту и по $_POST переходило на русский язык
default: echo 'Russian';
break;
}?>

Byrger
10.05.2009, 17:25
Создал батник который будет выполнять скрипт online.php
@"C:\Program Files (x86)\VertrigoServ\Php\php.exe" online.php
Всё бы хорошо но при запуске через БАТник пишет что не возможно к БД подключится
А если из браузера то всё ок, как быть?

D Mak
10.05.2009, 19:44
Byrger какую ошибка дает?

Byrger
10.05.2009, 20:24
Byrger какую ошибка дает?
функция майскукл_коннект...но коннект...
Если из браузере то всё ок....
Может ещё есть способы запуска ПХп сценария?
Я просто Крон хочу на Вин 2003 сделать...(nnCron стоит)

D Mak
10.05.2009, 21:25
функция майскукл_коннект...но коннект...
конкретнее, че возвращает мускул_конект?

Byrger
10.05.2009, 22:12
Warning: mysql_connect(): Can't connect to MySQL server on '127.0.0.1' (10022) in C:\Program Files (x86)\VertrigoServ\www\online.php on line 7
Ошибка БД

$msc=MYSQL_CONNECT($dbhost,$dbuser,$dbpass) or die ("Ошибка БД");

Через браузер всё ок запускается...

m0Hze
10.05.2009, 22:36
а мускул то включен? Попробуй localhost указать,а не ип

Byrger
10.05.2009, 23:42
а мускул то включен? Попробуй localhost указать,а не ип

мускул включен, как тогда через браузер работает?
Прописав локалхост ничего не изменилось

shellz[21h]
11.05.2009, 05:27
Получаю контент, функцией file_get_countents() при получения страницы редиректит на другую, как я могу узнать куда меня редирекнуло. Кроме сокетов есть варианты?

m0Hze
11.05.2009, 08:24
cURL, самый просто вариант,получение заголовков, без тела документа,и посмотреть Location.

L I G A
11.05.2009, 13:05
как выполнить 2 формы одним сабмитом? action один.

Vinsik
11.05.2009, 13:25
Ребят, помогите создать страничку, а то у мну траблы с формами... не могу сам сделать мини админку для сайта своего
надо чтоб было 2 формы ввода.
Формам задать переменые типа $text1 $text2
внизу кнопочка "ок"
при вводе текста в формы и после нажатия "ок" он бы редактировал файл.
Надо сделать так чтоб параметр например $text1 фтыкался между текстом
<center><b>$text1</b></center>
желательно чтоб работало все по фтп...
.
непонятно наверно написал :( я понимаю что тут нет ничего сложново но я даже не понимаю как начать :(

mouse.pro
11.05.2009, 13:35
как выполнить 2 формы одним сабмитом? action один.
http://otvety.google.ru/otvety/thread?tid=46c81f3bd6eae071&pli=1

eLWAux
11.05.2009, 14:20
Ребят, помогите создать страничку, а то у мну траблы с формами... не могу сам сделать мини админку для сайта своего
надо чтоб было 2 формы ввода.
Формам задать переменые типа $text1 $text2
внизу кнопочка "ок"
при вводе текста в формы и после нажатия "ок" он бы редактировал файл.
Надо сделать так чтоб параметр например $text1 фтыкался между текстом
<center><b>$text1</b></center>
желательно чтоб работало все по фтп...

<form method=post>
text1: <input type=text name=text1>
text2: <input type=text name=text2>
<input type=submit value="ok">
</form

<?
if (isset($_POST['text1'])) {
// тут соеденяешся с фтп
// ..
$fh = fopen('filename.txt','a');
fwrite($fh,'<center><b>'.htmlspecialchars($_POST['text']).'</b></center>');
fclose($fh);
// тут заливаеш файл filename.txt на фтп
// ..
print ('Finish!');
}

?>

Vinsik
11.05.2009, 14:28
не, надо чтоб он редактировал файл который уже на фтп...
например файл ftp://sayt.ru/news/news.php

krypt3r
12.05.2009, 09:05
$f = fopen ('ftp://sayt.ru/news/news.php', 'w')

:)

Que$t
12.05.2009, 10:44
как выполнить 2 формы одним сабмитом? action один.
..
<?
//test.php
if(!isset($_POST['data'])) {
?>
<form id='one' target='frame1' method='POST'>
<input type='text' name='data'>
</form>
<form id='two' target='frame2' onSubmit='document.getElementById("one").submit();' method='POST'>
<input type='text' name='data'>
<input type='submit' value='ok'>
</form>
<iframe name='frame1' style='display:none'></iframe><iframe name='frame2' style='display:none'></iframe>
<?
} else {
?>
<script>
alert("<?=$_POST['data']?>");
if(parent.form_ok) {
window.parent.document.location='test.php';
} else {
parent.form_ok=true;
}
</script>
<?
}
?>

5triker
12.05.2009, 15:59
имхо проще объединить 2формы в 1 чем делать тот ужас что в #10507 посте

L I G A
12.05.2009, 16:14
имхо проще объединить 2формы в 1 чем делать тот ужас что в #10507 посте
Уже давно не актуально.

Корвин
12.05.2009, 17:19
я тут пытаюсь создать pdf файл с помощью пхп, и тут трабл небольшой , есть ф-ция http://www.php.su/functions/?pdf-findfont (pdf_findfont()) , она должна возвращать метрики для определенного шрифта, а мне выдает ошибку Metrics data for font 'Arial' not found', шрифт вроде стандартный, в чем может быть проблема?

eLWAux
12.05.2009, 17:23
$font = pdf_findfont($pdf, "Arial", "winansi", 1);
if ($font) { echo 'ok'; } else { echo 'smth bad..'; }

Корвин
12.05.2009, 17:33
не пишет нито нито, сразу ошибку

Fatal error: Uncaught exception 'PDFlibException' with message 'Metrics data for font 'Arial' not found' in C:\xampp\htdocs\pdf.php:7 Stack trace: #0 C:\xampp\htdocs\pdf.php(7): pdf_findfont() #1 {main} thrown in C:\xampp\htdocs\pdf.php on line 7

Корвин
12.05.2009, 18:26
я вроде разобрался, там к библиотеке, работающей с pdf, прилагалась папка fonts, только вот куда эту папку пихать неясно, там два файла pdflib.upr и print_glyphs

Byrger
12.05.2009, 21:33
Поднимаю пост
http://forum.antichat.ru/showpost.php?p=1268826&postcount=10492

REBUUS
12.05.2009, 21:41
как в ПХП первое слово в строке засунуть в другую переменную , т.е все что до первого пробела

rushter
12.05.2009, 22:12
<?
$text = "1 2 3";
$p = explode(" ", $text);
$out = $p[0];
echo $out;
?>

laedafess
12.05.2009, 22:26
Поднимаю пост
http://forum.antichat.ru/showpost.php?p=1268826&postcount=10492
запусти сначала mysqld.exe

Новичек-я
13.05.2009, 09:03
Есть форма:
<textarea name="name" cols="60" rows="5"></textarea>
Помогите написать скрипт к этои форме, который бы разбивал бы введенные значения построчно, и выводил любое значение (рандомно) из этого textarea (Любую из строчек введенную в поле).

Я так понимаю тут нужен массив, значит рнр, надеюсь темой не ошибся.
Спасибо.

laedafess
13.05.2009, 10:05
<?
if (!isset($_POST[name]))
echo '<form method=post>
<textarea name="name" cols="60" rows="5"></textarea>
<input type=submit value=ok>
</form>';
else{
$arr=explode("\n",$_POST[name]);
echo $arr[rand(0,count($arr)-1)];
}
?>

Byrger
13.05.2009, 15:02
запусти сначала mysqld.exe
Запущен
Или через БАТ както ещё?

laedafess
13.05.2009, 15:48
Хм.. ну он в процессах есть? У меня после его запуска все заработало.

svesve
13.05.2009, 16:37
function dep_tree3 ($parent_id,$session) {
$sql = "SELECT * FROM `departments` WHERE `dep_parent_id` = $parent_id ORDER BY `dep_name`";
$result = mysql_query($sql);
if (mysql_num_rows($result) > 0) {
while ($row = mysql_fetch_array($result)) {
$sql2= "INSERT INTO `temp` ( `id` , `session` ) VALUES ('$row[dep_id]','$session')";
$result2 = mysql_query($sql2);
dep_tree3($row['dep_id']);
}
}
}

почему не получается записать в таблицу переменную session???
если ее вывести на экран до while и до if то она выводится а внутри уже нет в чем проблемма?

pento
13.05.2009, 16:40
function dep_tree3 ($parent_id,$session) {
$sql = "SELECT * FROM `departments` WHERE `dep_parent_id` = $parent_id ORDER BY `dep_name`";
$result = mysql_query($sql);
if (mysql_num_rows($result) > 0) {
while ($row = mysql_fetch_array($result)) {
$sql2= "INSERT INTO `temp` ( `id` , `session` ) VALUES ('$row[dep_id]','$session')";
$result2 = mysql_query($sql2);
dep_tree3($row['dep_id']);
}
}
}

почему не получается записать в таблицу переменную session???
если ее вывести на экран до while и до if то она выводится а внутри уже нет в чем проблемма?
В одинарных ковычках

svesve
13.05.2009, 17:45
В одинарных ковычках
причем тут кавычки?!
я ж вроде ясно описал проблему

$session не выводится после if(......) и также внутри while
до if все ок

Pashkela
13.05.2009, 18:04
2 svesve:

В начало скрипта вставь:

@ini_set("display_errors","1");

и после каждого квери

or die(mysql_error());

Byrger
13.05.2009, 18:12
Хм.. ну он в процессах есть? У меня после его запуска все заработало.

Да есть в процессах
Я же писал что из браузера всё ок открывается...

Doom123
13.05.2009, 19:59
svesve А ты не подумал что условие не выполняется?

и кстате зачем тебе if (mysql_num_rows($result) > 0) ?

ведь если небыло выбрано ничего из БД то while не будет выполнятся =)

ntldr
13.05.2009, 22:00
function dep_tree3 ($parent_id,$session) {
$sql = "SELECT * FROM `departments` WHERE `dep_parent_id` = $parent_id ORDER BY `dep_name`";
$result = mysql_query($sql);
if (mysql_num_rows($result) > 0) {
while ($row = mysql_fetch_array($result)) {
$sql2= "INSERT INTO `temp` ( `id` , `session` ) VALUES ('$row[dep_id]','$session')";
$result2 = mysql_query($sql2);
dep_tree3($row['dep_id']);
}
}
}

почему не получается записать в таблицу переменную session???
если ее вывести на экран до while и до if то она выводится а внутри уже нет в чем проблемма?
потому что НЕ '$row[dep_id]'
а '{$row['dep_id']}'

svesve
13.05.2009, 23:04
и кстате зачем тебе if (mysql_num_rows($result) > 0) ? ведь если небыло выбрано ничего из БД то while не будет выполнятся =)
тут рекурсия, ведь ее же надо будет когда то отсановить))))

потому что НЕ '$row[dep_id]' а '{$row['dep_id']}'

да суть не в этом а в том что даже
echo $session в while илил после if не дает ничего.переменная пустая!

ntldr
13.05.2009, 23:21
да суть не в этом а в том что даже
echo $session в while илил после if не дает ничего.переменная пустая!

и да, mysql_fetch_array фетчит в обычный массив, а не ассоциированный. Так что тебе нужно юзать mysql_fetch_assoc

svesve
13.05.2009, 23:56
и да, mysql_fetch_array фетчит в обычный массив, а не ассоциированный. Так что тебе нужно юзать mysql_fetch_assoc

блин причем тут массив речь идет о выводе переменной!

if (mysql_num_rows($result) > 0) {
echo $session;

^^вывода нет


echo $session;
if (mysql_num_rows($result) > 0) {

^^вывод есть

mysql_num_rows точно >0

m0Hze
14.05.2009, 00:18
$sql = "SELECT * FROM `departments` WHERE `dep_parent_id` = '$parent_id' ORDER BY `dep_name`";

ntldr
14.05.2009, 00:40
мохзе прав

mysql_num_rows точно >0

такие слова забудь
а проверку вывода делай примерно так
echo "-- $session --";

bxN5
14.05.2009, 02:21
$fp = fopen ( '1.txt', 'w' );

if ( $fp ) {

$size = filesize ( $fp );

$text= fread ( $fp, $size );


$res=$text+1;

fputs ($fp, $res);
fclose ( $fp );
}
Warning: filesize() [function.filesize]: stat failed for Resource id #4 in /home/mercitaxic5964/data/www/mercitaxi.com.ua/index.php on line 28

Warning: fread() [function.fread]: Length parameter must be greater than 0 in /home/mercitaxic5964/data/www/mercitaxi.com.ua/index.php on line 30
bool(false)
в чем загвоздка?

Pashkela
14.05.2009, 02:27
$fp = fopen ( '1.txt', 'w' );

w - открывает файл на запись, при этом УДАЛЯЕТ всё его содержимое, поэтому 0 байт

чтобы уметь ПРОЧИТАТЬ файл или сведения о нём - r, или + к любой другой букве

krypt3r
14.05.2009, 10:28
При открытии следует указать режим r+, файл откроется для чтения и записи, при этом указатель встанет в начало файла; либо же режим a+
php.net/fopen

Byrger
14.05.2009, 16:07
У меня идёт подгрузка скриптов таким сценарием...
Возможно ли поставить защиту от PHP -inj и как?

if (!IsSet($t)&!IsSet($f))
{
$f="main";
$filename=$f . ".php";
}
else
{
if (IsSet($t)&!IsSet($f))
{
$filename=$t . "/index.php";
}
if (IsSet($t)&IsSet($f))
{
$filename= $t . "/" . $f . ".php";
}
if (!IsSet($t)&IsSet($f))
{
$filename=$f . ".php";
}
}

bug1z
14.05.2009, 17:41
Используй функцию file_exists() дабы нельзя было ничего подключить из вне!
Возвращзает TRUE, если файл или каталог с именем, указанным в параметре filename, существует; возвращает FALSE в обратном случае.
(с)php.su




далее работай мозгом :)

art2222
14.05.2009, 18:24
Используй функцию file_exists() дабы нельзя было ничего подключить из вне!
С версии 5+ она работает и с ftp.

.Sylar
14.05.2009, 21:25
Тут все такие умные вопросы задают, а может кто-то объяснить чем $i++ отличается от ++$i , ведь по сути это inc(i) тот же, в чём отличие тогда. Я загуглил конечно, прочитал, но к сожалению не понял =.

Mars803
14.05.2009, 21:49
$i++ выдать $i как результат а затем увеличить $i на 1
++$i увеличить $i на 1 и выдать результат

Veteriuz
14.05.2009, 23:30
емеем

<?
$data = gzfile('http://ru7.voyna-plemyon.ru/map/player.txt.gz');
list($id, $name, $ally, $villages, $points, $rank) = explode(",", $dat);
if($ally==3560)
{
echo $name;
echo "<br>";
}
?>

смысл: вывод всех $name с $ally==3560 на экран. (будет около 180 значений)
а вообще вместо вывода на экран будет запись в новый файл
не работает :(



ps файл http://ru7.voyna-plemyon.ru/map/player.txt.gz действителен(переодически обновляется) и сформирован, как уточнили Админы, через urlencode()


если нужна - инфа тут (http://ru7.voyna-plemyon.ru/help2.php?article=map_data)


UPD
порылся в этой теме и нашел похожий случай. переделал под себя и .. заработало!
но чуствую кривовато как-то работает:)

<?
set_time_limit(0);
$log = 'http://ru7.voyna-plemyon.ru/map/player.txt.gz';
$file = gzfile($log);
$k = array();
foreach($file as $abc)
{
list($k['id'][], $k['namel'][], $k['ally'][], $k['villages'][], $k['points'][],

$k['rank'][]) = explode(',,,,,', trim($abc));
}
$count = count($k['id']); // тут считает только по id
for($i = 0;$i < $count; $i++)
{
$str['$i'] = $k['id'][$i];
$data = $str['$i'];
list($id, $name, $ally, $villages, $points, $rank) = explode(",", $data);
if($ally==3560)
{
echo urldecode($name);
echo "<br>";
}
}
?>

проблемы на этом этапе:
1) $k['id'][$i] присваивается значение всей строки(поэтоу затем каждую строчку ломал на части), а $k['name'][$i] ничего не присваиваться
2) имена на русском и перебиты через urlencode. при urldecode выдает непонятную кодировку. как можно исправить?
спасибо за внимание:)

Корвин
15.05.2009, 00:15
помогите плиз, никак не могу разобратся, мне нужно сгенерить .pdf файл

добавил библиотеку pdflib.dll

взял самый простой код генерации, но мне выдает ошибку что нужны метрики шрифтов, эти метрики были в архиве библиотеки pdflib, отрыл в инете как подключать эти метрики шрифтов, только ничего все равно не работает

вот ошибка

Fatal error: Uncaught exception 'PDFlibException' with message 'Metrics data for font 'Tahoma' not found' in C:\xampp\htdocs\pdf.php:9 Stack trace: #0 C:\xampp\htdocs\pdf.php(9): pdf_findfont() #1 {main} thrown in C:\xampp\htdocs\pdf.php on line 9

вот код :



<?php

$pdf = pdf_new();

pdf_open_file($pdf, 'new.pdf');
pdf_begin_page($pdf, 595, 842);
PDF_set_parameter($pdf,"resourcefile","pdflib.upr");
PDF_set_parameter($pdf,"resourcefile","print_glyphs.ps");
pdf_findfont($pdf, "Tahoma", "host", 1);
pdf_setfont($pdf, "Tahoma", 30);
pdf_set_value($pdf, "textrendering", 1);
pdf_show_xy($pdf, "A PDF document created in memory!", 50, 750);
pdf_end_page($pdf);
pdf_close($pdf);

$data = pdf_get_buffer($pdf);

header("Content-type: application/pdf");
header("Content-disposition: inline; filename=test.pdf");
header("Content-length: " . strlen($data));

echo $data;

?>




эти две строчки подключают шрифты .... вроде.. должны (файлы шрифтов находятся в одной директории с pdf.php) :



PDF_set_parameter($pdf,"resourcefile","pdflib.upr");
PDF_set_parameter($pdf,"resourcefile","print_glyphs.ps");



помогите если кто такое уже делал...

xpkeygen
15.05.2009, 16:32
какие уязвимости можно проэксплуатировать в этом коде

<html><head><title>Support Control Module (c)
</title>
<link href="style.css" rel="stylesheet" type="text/css"><meta http-equiv="Content-Type" content="text/html; charset=windows-1251"></head>
<body>
<form name="logon" action="authorize.php" method="post">
<div align="center">
<img src="/support/i/logo.jpg"/>
<table width="210" border="0" cellspacing="0" cellpadding="1" class="text">
<tr>
<td colspan="2" align="center" height="20">Пожалуйста, авторизируйтесь...</td>
</tr>
<tr>
<td id="b">ЛОГИН:</td>
<td><input type="text" name="login" value="" size="20"></td>
</tr>
<tr>
<td id="b">ПАРОЛЬ:</td>
<td><input type="password" name="password" value="" size="20"></td>
</tr>
<tr>
<td>&nbsp;</td>
<td><input type="submit" name="submit" value="ВОЙТИ" class="text" id="b"></td>
</tr>
<tr>
<td colspan="2" height="1">

</td>
</tr>
<tr>
<td colspan="2" align="center" valign="bottom" height="40"><hr>
Support Control Module (c) 2005-2006</td>
</tr>
</table>
</div>
</form>
</body>
</html>

bug1z
15.05.2009, 16:39
Эм, это вообще хтмл шаблон формы авторизации.
Искать уязвимости надо в authorize.php
А из этого ничего...разве что
name="password"
name="login"
изредко могут совпадать с названием колонок в Бд...

xpkeygen
15.05.2009, 18:07
Эм, это вообще хтмл шаблон формы авторизации.
Искать уязвимости надо в authorize.php
А из этого ничего...разве что
name="password"
name="login"
изредко могут совпадать с названием колонок в Бд...

насчет login и password, то это я проверял - не подходит. Может быть есть какие-нибудь уязвимости, если вписать какую-нибудь абракадабру в поля логин или пароль ?

m0Hze
15.05.2009, 22:13
почитай статьи,пробуй передавать массивы,а не переменные,попробуй скули, да много что

Lide
15.05.2009, 22:18
Решите плиззз
Простенький алгоритм:
Дан двумерный массив размерностью 30x30:
К любом элементу можно обратиться типа array[X][Y],
где XY координаты.
В массиве может содержаться число от 1 до 3-х.

Необходимо написать функцию, которая возвращает координаты последовательности из
любого числа 1 или 2 (не 3), которое идет 5 раз подряд по вертикали, горизонтали
или диагонали.

Пример:
[3][3][1][3][3][3]
[3][2][1][3][3][3]
[3][2][1][3][3][3]
[3][3][1][3][3][3]
[3][3][1][3][3][2]

Функция должна вернуть:
3,1
3,2
3,3
3,4
3,5

bug1z
15.05.2009, 22:43
2xpkeygen
попробуй:

Login: " OR 1=1%00
Pass:

или

Login: ' OR 1=1%00
Pass:

Вариантов много, в зависимости от того, какой код в authorize.php

KaMiKadZe
15.05.2009, 23:46
Нужно добавить переключение по месяцам...
Т.е должны быть "<" - на месяц назад и ">" - месяц вперед
Уже всю голову сломал...





<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML><HEAD><TITLE>Календарь</TITLE>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">

</HEAD>
<body>
<?php
include("blocks/bd.php");
// Функция для проверки имеются ли новости по определенной дате
function url ($date){
$result = mysql_query ("SELECT date FROM news WHERE date='$date'");
$numrow = mysql_num_rows ($result);
return $numrow;
}
//Вычисляем дату
$td = "<td align='right' class='a1'>";
$day = date ('d'); // день месяца
$month = date ('m'); // месяц
$year = date ('Y'); // год пример 1970
$end_day = date ('t'); // количество дней в месяце
$one_day = date ('w'); // номер дня недели от 0 до 6
// Присваиваем каждому месяцу название
switch ($month){
case 0:
$month_s='Декабрь';
break;
case 1:
$month_s='Январь';
break;
case 2:
$month_s='Февраль';
break;
case 3:
$month_s='Март';
break;
case 4:
$month_s='Апрель';
break;
case 5:
$month_s='Май';
break;
case 6:
$month_s='Июнь';
break;
case 7:
$month_s='Июль';
break;
case 8:
$month_s='Август';
break;
case 9:
$month_s='Сентябрь';
break;
case 10:
$month_s='Октябрь';
break;
case 11:
$month_s='Ноябрь';
break;
}
//Рисуем таблицу

$calendar = "<table align='center' border='0' cellpadding='0' cellspacing='0' class='a2'>
<tr><td>
<table border='0' cellspacing='1' cellpadding='2' width='100%'>
<tr>
<td align='center' colspan='7' class='a3'>
<font class='a4'>
<b> $month_s $year </b></font></td>
</tr>
<tr>
<td align='center' class='a5'>Пн</td>
<td align='center' class='a5'>Вт</td>
<td align='center' class='a5'>Ср</td>
<td align='center' class='a5'>Чт</td>
<td align='center' class='a5'>Пт</td>
<td align='center' class='a5'>Сб</td>
<td align='center' class='a5'>Вс</td>
</tr>";

//Цикл заполнения календаря
for ( $i = 1; $i <= $end_day+$one_day; $i++)
{
if ($x==0){$x=7;}
$x--;
$a = $i- $one_day;
$date = $year."-".$month."-".$a;

// Делаем дни что не существуют в начале пустыми
if ($one_day> $i or $a<1){$calendar .= "$td</td>";}
// Суббота
elseif ($i==6 or $i==13 or $i==20 or $i==27 or $i==34){
//Сегодняшний день если суббота
if ($i==$day+$one_day){
// Делаем числа не имеющие новостей не ссылками
if (url($date) > 0)
{
$a = "<font class='a4'><a href='index.php?date=$date'>$a</a></font>";
}
else
{
$a = "<font class='a4'>$a</font>";
}
}

// Делаем числа не имеющие новостей не ссылками
if (url($date) > 0)
{
$calendar .= "$td <a href='index.php?date=$date'>$a</a> </td>\n";
}
else
{
$calendar .= "$td $a</td>\n";
}
}
// Воскресенье + достройка таблицы
elseif ($i==7 or $i==14 or $i==21 or $i==28 or $i==35){
// Делаем числа не имеющие новостей не ссылками
if (url($date) > 0)
{
$calendar .= "$td <a href='index.php?date=$date'>$a</a> </td></tr><tr>";
}
else
{
$calendar .= "$td $a </td></tr><tr>";
}

}
// Сегодняшний день если воскресенье
elseif ($i==$day+$one_day){
// Делаем числа не имеющие новостей не ссылками
if (url($date) > 0)
{
$calendar .= "<td align='right' class='a7'><font class='forums'><a href='index.php?date=$date'>$a</a></font></td>";
}
else
{
$calendar .= "<td align='right' class='a7'><font class='forums'>$a</font></td>";
}
}
// Выводим все остальные дни
else {
// Делаем числа не имеющие новостей не ссылками
if (url($date) > 0)
{

$calendar .= "$td <a href='index.php?date=$date'>$a</a> </td>";
}
else
{
$calendar .= "$td $a </td>";
}

}
}
// Делаем дни что не существуют в конце пустыми
if ($x!=0){
for ( $i = 0; $i < $x; $i++){ $calendar .= "$td</td>"; }
}
$calendar .= "</table></td></tr></table>";
echo $calendar;

?>

reega
16.05.2009, 03:50
Дяди добрые!!!
Чтобы всех Nickname пользователей собрать есть ли скрипт?
а то их 22 тыщи по 25 на странице.
поможите в личку!

http://www.drive2.ru/users/?country=RU&city=&page=last&filter=

D Mak
16.05.2009, 09:34
Нужно добавить переключение по месяцам...
Т.е должны быть "<" - на месяц назад и ">" - месяц вперед
Уже всю голову сломал...


не стал разбираться в твоем коде, чет говнокодом попахивает.. наговнокодил сам, разберешься думаю

<?php

//Вычисляем дату
$day = date ('d'); // день месяца
$month = (isset($_GET['month']) && intval($_GET['month']) && $_GET['month']>0 && $_GET['month']<=12) ? intval($_GET['month']) : date ('m'); // месяц
$year = date ('Y'); // год пример 1970
$end_day = date ('t'); // количество дней в месяце
$one_day = date ('N'); // !!
// Присваиваем каждому месяцу название
?>
<table>
<tr>
<td>ПН</td>
<td>ВТ</td>
<td>СР</td>
<td>ЧТ</td>
<td>ПТ</td>
<td>СБ</td>
<td>ВС</td>
</tr>
<tr><?

$ot = date('N', mktime(1, 0, 0, $month, 1, $year))-1; //отступ для 1 числа
for($i=0; $i<$ot; $i++) echo '<td>&nbsp;</td>';
for($i=1; $i<=$end_day; $i++) { echo '<td>'.$i.'</td>'; echo (!(($ot + $i) % 7)) ? ($i != $end_day) ? "</tr><tr>\n" : "</tr>\n" : '';}
?>
</table>
<a href="?month=<?=($month-1)%12;?>">&lt;</a>
<a href="?month=<?=($month+1)%12;?>">></a>

Lide
16.05.2009, 10:04
посмотрите мой алгоритм

Byrger
16.05.2009, 10:13
Как проверить вернул ли что-то SQL запрос?

D Mak
16.05.2009, 10:39
Byrger mysql_num_rows

D Mak
16.05.2009, 10:49
Lide небольшой говнокод
for($i=0; $i<30; $i++)
for($j=0; $j<30; $j++)
if(a[i][j]==1) if($j<26 && a[i][j+1]==1 && a[i][j+2]==1 && ...) { echo $j.$j+1.$j+2...; $j+=5}
if(a[i][j]==2) if($j<26 && a[i][j+1]==2 && a[i][j+2]==2 && ...) { echo $j.$j+1.$j+2...; $j+=5}
аналогично для вертикали, а для диагонали чет думать неохота пока

art2222
16.05.2009, 12:08
Как проверить вернул ли что-то SQL запрос?

Только для запросов SELECT, SHOW, EXPLAIN, DESCRIBE, mysql_query() возвращает указатель на результат запроса, или FALSE если запрос не был выполнен. В остальных случаях, mysql_query() возвращает TRUE в случае успешного запроса и FALSE в случае ошибки. Значение не равное FALSE говорит о том, что запрос был выполнен успешно. Он не говорит о количестве затронутых или возвращённых рядов. Вполне возможна ситуация, когда успешный запрос не затронет ни одного ряда.

Т.е.

<?php
$result = mysql_query("SELECT * FROM mytable")
or die("Invalid query: " . mysql_error());
?>

Или

<?php
$result = mysql_query("SELECT * FROM mytable");
if ($result)
{
//Все ок.
}
else
{
//Что то не так.
}
?>

Byrger
16.05.2009, 12:15
как правильно расставить кавычки чтоб такая конструкция работала?
$_POST["count[$key]"]

BiG_][aKeR
16.05.2009, 12:44
Почему ф-ция исполняеться БЕЗ её вызова в коде???????

<?php
function start(){
$fpg = fopen("2.txt","r");
for ($vsegvuvod=0; $vsegvuvod>-1; $vsegvuvod++){
$datag = fgets($fpg, 20000000);
if($datag==""){
break;
}
}
fclose($fpg);
return $vsegvuvod;
}
$vsegvuvod=&start();
echo $vsegvuvod;
?>

От,по сути должна быть пустая страница, НО функция обрабатываеться и так,что с
start();
что без него!! почему???

Gifts
16.05.2009, 12:47
BiG_][aKeR А это что? $vsegvuvod=&start();

Или покажите два варианта, правильный и который вы считаете неправильным

D Mak
16.05.2009, 12:49
Byrger что ты хотел сказать этой конструкцией?
$_POST[$count[$key]] - если $count -массив строк

BiG_][aKeR &start(); - а это не вызов? или че ты имел ввиду?

BiG_][aKeR
16.05.2009, 12:50
хм,а как тогда достать содержимое переменной в цункции в наружу без етого,чтоб функция не вызывалась?????

Pashkela
16.05.2009, 12:54
никак, только выполнив функцию

Byrger
16.05.2009, 13:41
Есть строка надо проверить что в ней не содержались симворы...
Только латинский алфовит
Как это сделать?

PS не резать их а именно проверить есть или нет

m0Hze
16.05.2009, 13:45
if(!preg_match('#([a-zA-Z])#',$text)){
echo 'fuck';
}else{
echo 'nice';
}

BiG_][aKeR
16.05.2009, 14:46
Помогите плз.

<?php
$post="pt";
if (preg_match("/$post/",'p',$t)){
echo "ok";

}
?>
Походу должно искать в $post наличие символа p в нём,и есле он присутствует то выводить ok,но,он не пашет так. Есле $post="p"; то выведет,а есле $post="pabc"; то нет,почему?

art2222
16.05.2009, 15:20
Походу должно искать в $post наличие символа p в нём,и есле он присутствует то выводить ok,но,он не пашет так. Есле $post="p"; то выведет,а есле $post="pabc"; то нет,почему?
Потому что параметры перепутал.

preg_match("/p/",$post,$t)

Pashkela
16.05.2009, 15:33
Если просто для поиска и определения наличия символа - массив $t указывать не обязательно, если в дальнейшем массив $t не будет использоваться

т.е. просто:


<?php
$post="pt";
if (preg_match("/p/",$post)) echo "ok";
?>

Chaak
16.05.2009, 15:54
не забудьте про preg_quote

BiG_][aKeR
16.05.2009, 15:56
не забудьте про preg_quote
Емм,а он зачем сдесь то??

bxN5
16.05.2009, 18:17
как из js перед значение переменной в пхп ? (GET не предлагать)

Chaak
16.05.2009, 18:29
[aKeR']Емм,а он зачем сдесь то??
Чтобы не было проблем, когда юзер введет []{}/ и тому подобное, т.к изменит логику регулярки.

bxn5, посмотри примеры с библиотекой ajax

Veteriuz
16.05.2009, 19:39
пытаюсь определить високосный ли год
29 дней в феврале имеет каждый год, разделяя который на 4 нет остатка

<?
$vis = $da1_y / 4; // делю "год" на четыре.
if(??????){$fev = 29; } // вместо вопросов нужна функция что то вроде "если $vis_без_остатка = $vis"
else {$fev = 28; }
echo $fev;
?>

нигде не могу найти подобную функцию. подскажите плиз. либо альтернативный способ

в экселе такое точно есть)