Добавление переменной в массив находящийся в файле

Тема в разделе "Как сделать...", создана пользователем zilon, 8 авг 2013.

  1. zilon

    zilon

    Регистр.:
    30 июл 2011
    Сообщения:
    370
    Симпатии:
    147
    Есть скрипт для добавления доменов в панельку ipsmgr, каждый добавленый домен он записывает массив который находится в файле config_domains_vip.php вот так

    PHP:
    $file dirname(__FILE__).'\config_domains_vip.php';
    $domann ",\r\n                          '$domain' )";
    $current file_get_contents($file);
    $current str_replace ")"$domann$current);
    if(
    file_put_contents($file$current))
    {
          
    //echo 'домен добавлен в конфиг<br>';
          
    }else{
          
    //echo 'домен не записался в конфиг<br>';
     
    }
    то есть просто в самый конец массива, вместо закрывающей скобки, добавляет перенос строки и домен и скобку. Это всё работает но хочется по людски сделать. Как не будь так, потому что планирую делать скрипт удаления доменов, а он не будет нормально работать из за таких вот костылей

    PHP:
    <?php
     
    //это работает
     
    $massiv = array ('doman1.ru''doman2.ru''doman3.ru');
    print_r($massiv);
    echo 
    '<br><br>------------<br><br>';
    array_push($massiv'doman4.ru''doman5.ru');
    print_r($massiv);
     
    //это то что надо но не работает
    $file dirname(__FILE__).'/massiva.php';
    $fp fopen ($file"w");
    array_push($fp'doman4.ru''doman5.ru');
    fclose($fp);
     
    ?>
    вот сам скрипт для добавления доменов

    PHP:
    <?php
     
    include ('config_vip.php');
    include (
    'config_domains.php');
     
    if (empty(
    $_POST['domains'])) {
    ?>
    <center>
    <form method="post">
    Домены списком, например nulled.cc<br>
    <textarea name="domains" rows="25" cols="30"></textarea><br><br>
    <input type="submit" value="Добавить">
    </form>
    </center>
    <?
    } else {
    $domains = $_POST['domains'];
    $ch = curl_init();
    $auth_url = "https://$ip/manager/ispmgr?out=text&func=auth&username=$login&password=$pass";
    curl_setopt($ch, CURLOPT_URL, $auth_url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
    $auth = curl_exec($ch);
    curl_close($ch);
    $auth = str_replace("auth=", "", $auth);
    $auth = trim($auth);
    $domains = explode("\n", $domains);
    foreach ($domains as $domain) {
            $domain = trim($domain);
            $ch = curl_init();
            $create_url = "https://$ip/manager/ispmgr?out=text&auth=$auth&func=domain.edit&sok=yes&webdomain=on&ip=$ip&ns=$ns1.%20$ns2.&mx=mail%20mail&owner=$owner&name=$domain";
            curl_setopt($ch, CURLOPT_URL, $create_url);
            curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
            curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
            $data = curl_exec($ch);
            curl_close($ch);
     
            echo "<a href='http://$domain' target='blank'>$domain</a> $data <br>";
            flush();
            $file = dirname(__FILE__).'\config_domains_vip.php';
            $domann = ",\r\n                          '$domain' )";
            $current = file_get_contents($file);
            $current = str_replace ( ")", $domann, $current);
            if(file_put_contents($file, $current)){
            //echo 'домен добавлен в конфиг<br>';
            }else{
            //echo 'домен не записался в конфиг<br>';
            }
                    }
    echo 'готово!';
    }
    ?>
    подскажите пжалуста как записать добавленый домен в массив не стриг реплейсом а функцией array_push при том что массив, находится в файле :thenks:
     
  2. ArtyGrand

    ArtyGrand Постоялец

    Регистр.:
    6 июн 2009
    Сообщения:
    80
    Симпатии:
    37
    Что тебе мешает пользоваться функциями unserialize и serialize?
     
    zilon и Шумадан нравится это.
  3. zilon

    zilon

    Регистр.:
    30 июл 2011
    Сообщения:
    370
    Симпатии:
    147
    много чего перепробовал максимум чего добился - получилось записать все домены в одну строку - домен1домен2домен3 а как масив записать?:alko:

    PHP:
    echo '<br><br>функция serialize<br><br>';
    $ser serialize ($doman);
    print_r($ser);
    echo 
    '<br><br>функция unserialize<br><br>';
    $unser unserialize ($ser);
    print_r($unser);
    echo 
    '<br><br>функция array_push<br><br>';
    array_push($unser$domain);
    print_r($unser);
     
    $file dirname(__FILE__).'\config_domains_vip.php';
     
    /* $file = dirname(__FILE__).'\config_domains_vip.php';
    $domann = ",\r\n '$domain' )";
    $current = file_get_contents($file);
    $current = str_replace ( ")", $domann, $current);
    */
    if(file_put_contents($file$unser)){
    echo 
    'домен добавлен в конфиг<br>';
    }else{
    //echo 'домен не записался в конфиг<br>';
    }
     
  4. latteo

    latteo Эффективное использование PHP, MySQL

    Moderator
    Регистр.:
    28 фев 2008
    Сообщения:
    1.450
    Симпатии:
    1.240
    file_put_contents как раз для serialize данных имеет смысл вызывать и с блокировкой файла на случай двойного запуска скрипта в одно и то же время:
    PHP:
    $arr file_get_contents($fileLOCK_EX);
    $arr unserialize ($arr);

    array_push($arr$domain);
    $ser serialize ($arr);
    file_put_contents($file$serLOCK_EX);
     
    Шумадан нравится это.
  5. zilon

    zilon

    Регистр.:
    30 июл 2011
    Сообщения:
    370
    Симпатии:
    147
    я думал что в массиве если после последнего элемента будет запятая стоять то синтаксическая ошибка будет, оказалось что нет и можно так написать
    PHP:
    $doman = array
     
    (
     
    'doman1.ru',
    'doman2.ru',
    'doman3.ru',
     
    );
    теперь проблем нету с удалением последнего элемента из массива добавляется и удаляется одно и тоже только строки пустые остаются :beer:
     
  6. ArtyGrand

    ArtyGrand Постоялец

    Регистр.:
    6 июн 2009
    Сообщения:
    80
    Симпатии:
    37
    zilon, что ты мучаешься, тебе даже рабочий код дали.

    ты получаешь свой массив
    PHP:
    $arr file_get_contents($fileLOCK_EX);
    $arr unserialize ($arr);
    добавляешь новый домен
    PHP:
    array_push($arr$domain);
    записываешь в файл новый массив
    PHP:
    $ser serialize ($arr);
    file_put_contents($file$serLOCK_EX);
    зачем ты что то еще неправильное придумал?
     
  7. zilon

    zilon

    Регистр.:
    30 июл 2011
    Сообщения:
    370
    Симпатии:
    147
    он конечно работает, но не так как надо, перезаписывает в файл domains это - b:0; и пишет что warninng, в array_push() первый аргумент - массив

    PHP:
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">

    <?php

    if(isset($_POST['adddomains']))

    {

        
    $domainss $_POST['adddomains'];
        
    $domainss explode("\n"$domainss);
        
    $file dirname(__FILE__).'\domains.php';
        foreach (
    $domainss as $domann)
     
        {

            
    $arr file_get_contents($fileLOCK_EX);
            
    $arr unserialize ($arr);
            
    $ser serialize ($arr);
            
    array_push($doman$domain);
            
    file_put_contents($file$serLOCK_EX);

        }
    }

    else {


    echo
    "
    <form method='post' action=''>
    <div id=right>
    <br>Форма добавления доменов<br><br>
    каждый домен с новой строчки<br><br>
    <textarea  name='adddomains' rows='15' cols='65'>besplatnie.ru
    igrinatelefon.ru
    igrinatelefonnokia.ru</textarea><br><br>
    <input type='submit' value='Добавить домены'>
    <br><br>
    <!-- <input type='reset' name='reset' value='Очистить форму от доменов'> -->
    </form>
    </div>
    <style type='text/css'>
    #right {
      height:56px;
      right:10px;
      position:fixed;
      top:0%;
      z-index:2000;
      background: #fff;
    }
    </style>
    </center>
    "
    ;

    }

    ?>
    PHP:
    <?php

    $doman 
    = array
     
        (

        
    'brauzernie-igri.ru',
        
    'igrinatelefon.ru',
        
    'igrinatelefonnokia.ru',

        );

    ?>
    кто не верит, может проверить вот архивчик с двумя скриптами
     

    Вложения:

    • localhost.zip
      Размер файла:
      1 КБ
      Просмотров:
      3
  8. Шумадан

    Шумадан Хабарра!!11

    Регистр.:
    6 фев 2008
    Сообщения:
    1.723
    Симпатии:
    2.100
    попробуй имена переменных называть по человечески, и сам путаться не будешь и другим глаза побережёшь :crazy:
    PHP:
    foreach ($domainss as $domann)
        {

           ...
            
    array_push($doman$domain);
            ...

        }
    domann, doman, domain -> WTF? а код вообще, одно пишет - другое присваивает, путаница на путанице
     
  9. latteo

    latteo Эффективное использование PHP, MySQL

    Moderator
    Регистр.:
    28 фев 2008
    Сообщения:
    1.450
    Симпатии:
    1.240
    PHP:
    Поправил сейв:

    if(isset(
    $_POST['adddomains']))
    {
        
    $domainss $_POST['adddomains'];
        
    $domainss explode("\n"$domainss);
      
        
    $file dirname(__FILE__).'\domains.php'

      if (
    count($domainss)) {
        
    $arr file_get_contents($fileLOCK_EX);
        
    $arr unserialize ($arr);
        if (!
    is_array($arr)) $arr = array();
        
    array_push($arr$domainss);
        
    $ser serialize ($arr);

        
    file_put_contents($file$serLOCK_EX);
      }

    }

    PS вот зачем надо читать умные книжки по PHP, хотя бы первые главы, в которых рассказывается про циклы и типы данных.
    PPS рекомендую Фленов "PHP глазами хакера"
     
    zilon и Шумадан нравится это.
  10. BDSG

    BDSG

    Регистр.:
    28 фев 2009
    Сообщения:
    203
    Симпатии:
    109
    latteo, только всё-таки array_merge, а не array_push.. а то вы создаёте вложенный массив, а не добавляете к существующему..