За последние 24 часа нас посетили 22717 программистов и 1267 роботов. Сейчас ищут 722 программиста ...

Ошибка Fatal error: Call-time pass-by-reference has been removed in при переходе с php5.2 на php5.6

Тема в разделе "PHP для новичков", создана пользователем boomer546, 24 авг 2017.

  1. boomer546

    boomer546 Новичок

    С нами с:
    24 авг 2017
    Сообщения:
    1
    Симпатии:
    0
    Друзья! Граждане! Братья по php!
    Помогите справиться с ошибкой - из-за нее естественно не работает сайт. На старом php5.2 работает - на новом нет. Проблема в &
    Не могу понять как исправить. Вот код

    PHP:
    1. <?php
    2.  
    3. error_reporting( E_ERROR );
    4.  
    5. function isStoreLink($link){
    6.   return (strstr($link, 'store/') !== FALSE);
    7. }
    8. function getNewLink($url, $cats, $prods){
    9.   $urlParts = explode('/', $url);
    10.   foreach ($urlParts as $k => $part){
    11.   if(is_numeric($part)) {
    12.   $urlParts[$k] = $cats[$part];
    13.   }
    14.   if( strstr($part, '?pos=') ) {
    15.   $pos = explode('=', $part);
    16.   $urlParts[$k] = $prods[$pos[1]];
    17.   }
    18.   }
    19.   return implode('/',$urlParts);
    20. }
    21.  
    22. function callback($buffer)
    23. {
    24.   preg_match_all ("/a[\s]+[^>]*?href[\s]?=[\s\"\']+".
    25.   "(.*?)[\"\']+.*?>"."([^<]+|.*?)?<\/a>/",
    26.   $buffer, &$matches);
    27.  
    28.   $links = $matches[1];
    29.   // file_put_contents('processed.txt', var_export($links, true));
    30.   $storeLinks = array();
    31.   foreach ($links as $link){
    32.   if( isStoreLink($link) )
    33.   array_push($storeLinks, $link);
    34.   }
    35.   $replaces = array();
    36.   $categoryIDS = array();
    37.   $productIDS  = array();
    38.  
    39.   foreach ($storeLinks as $k => $link) {
    40.   $parts = explode('/', $link);
    41.   foreach($parts as $part)
    42.   {
    43.   if(is_numeric($part))
    44.   {
    45.   array_push($categoryIDS, $part);
    46.   }elseif( strpos($part, '?pos=') !== false ){
    47.   array_push($productIDS, str_replace('?pos=', '', $part));
    48.   }
    49.   }
    50.   }
    51.   $mysqli = new mysqli('localhost', '', '', '');
    52.   if ($mysqli->connect_error) {
    53.   die('Connect Error (' . $mysqli->connect_errno . ') ' . $mysqli->connect_error);
    54.   }
    55.  
    56.   $catStmt = $mysqli->query("SELECT id, url FROM `eshop_cats` WHERE id IN(".implode(',', $categoryIDS).")");
    57.   $categoryUrlParts = array();
    58.   while($u = mysqli_fetch_assoc($catStmt)){
    59.   $categoryUrlParts[$u['id']] = $u['url'];
    60.   }
    61.  
    62.   $prodStmt = $mysqli->query("SELECT id, url FROM `eshop_pos` WHERE id IN(".implode(',', $productIDS).")");
    63.   $productUrlParts = array();
    64.  
    65.   while($u = mysqli_fetch_assoc($prodStmt)){
    66.   $productUrlParts[$u['id']] = $u['url'];
    67.   }
    68.  
    69.   foreach ($storeLinks as $link){
    70.   if( strstr($link, '?pos=') ) {
    71.   $p = explode('/', $link); $numVals = array();
    72.   foreach($p as $k => $l){
    73.   if(is_numeric($l))
    74.   array_push($numVals, $k);
    75.   }
    76.   for($i=1; $i<count($numVals); $i++){
    77.   unset($p[$numVals[$i]]);
    78.   }
    79.   $prodLink = implode('/',$p);
    80.   $replaces[$link] = getNewLink($prodLink, $categoryUrlParts, $productUrlParts);
    81.   }else{
    82.   $replaces[$link] = getNewLink($link, $categoryUrlParts, $productUrlParts);
    83.   }
    84.   // If is product delete all categories excluded first like this if(strpos($link, 'pos')){$link = ...}
    85.   }
    86.  
    87.  
    88.  
    89.   //file_put_contents('processed.txt', $buffer);
    90.   foreach($replaces as $link => $replace){
    91.   if($replace{strlen($replace)-1} !== '/')
    92.   $replace.='/';
    93.   $buffer = str_replace('"'.$link.'"', '"'.$replace.'"', $buffer);
    94.   }
    95.   // $buffer = str_replace(array_keys($replaces), array_values($replaces), $buffer);
    96.  
    97.   //file_put_contents('processed.txt', var_export($replaces, true)."\r\n".'---------------------------'."\r\n", FILE_APPEND);
    98.   //file_put_contents('processed.txt', $buffer, FILE_APPEND);
    99.   return $buffer;
    100. }
    101.  
    102. $mysqli = new mysqli('localhost', '', '', '');
    103. if ($mysqli->connect_error) {
    104.   die('Connect Error (' . $mysqli->connect_errno . ') ' . $mysqli->connect_error);
    105. }
    106.  
    107. function BuildProductString($url, $mysql)
    108. {
    109.   $query = $mysql->query("SELECT id, eshopcatid FROM `eshop_pos` WHERE `url`='".$url."' LIMIT 0,1");
    110.   $res = $query->fetch_assoc();
    111.   $uri = catsUpTree($res['eshopcatid'], $mysql);
    112.   $uri = explode('/', $uri);
    113.   $uri = array_reverse($uri);
    114.   unset($uri[array_search(13480, $uri)]);
    115.   $uri = implode('/', $uri);
    116.   $uri .='?pos='.$res['id'];
    117.   $uri = '/'.$uri;
    118.   return $uri;
    119. }
    120.  
    121. function catsUpTree($id, $mysql)
    122. {
    123.   $cats  = '/'.$id;
    124.   $query = $mysql->query("SELECT parent_id FROM `eshop_cats` WHERE `id`='".(int)$id."' LIMIT 0,1");
    125.   $cat = $query->fetch_assoc();
    126.   if($cat['parent_id'] > 0)
    127.   $cats.=catsUpTree($cat['parent_id'], $mysql);
    128.   return $cats;
    129. }
    130.  
    131. function getUrlToID($urls, $mysqli)
    132. {
    133.  
    134.   $IN = array();
    135.   foreach($urls as $u){
    136.   $IN[] = "'".$u."'";
    137.  
    138.   }
    139.   $INc = $IN;
    140.   $pid = array(13480);
    141.   $ids = $mysqli->query("SELECT id FROM eshop_cats WHERE url IN(".implode(',', $INc).")");
    142.  
    143.   while ($s = mysqli_fetch_assoc($ids)){
    144.   array_push($pid, $s['id']);
    145.   }
    146.  
    147.  
    148.   $queryCategory = $mysqli->query("SELECT url, id FROM `eshop_cats` WHERE url IN(".implode(',', $IN).") AND active=1 AND parent_id IN(".implode(',', $pid).")");
    149. //  echo "SELECT url, id FROM `eshop_cats` WHERE url IN(".implode(',', $IN).") AND active=1 AND parent_id IN(".implode(',', $pid).")";
    150.   $queryProducts = $mysqli->query("SELECT url, id FROM `eshop_pos` WHERE url IN(".implode(',', $IN).")");
    151.   $categories = array();
    152.   $products = array();
    153.   if($queryCategory){
    154.   while ($q = mysqli_fetch_assoc($queryCategory)){
    155.  
    156.   $categories[$q['url']] = $q['id'];
    157.   }
    158.   }
    159.   if($queryProducts) {
    160.   while($q = mysqli_fetch_assoc($queryProducts)){
    161.   $products[$q['url']] = $q['id'];
    162.   }
    163.   }
    164.   $parent_id=13480;
    165.   foreach($urls as $u)
    166.    {
    167.   $query = $mysqli->query("SELECT id, parent_id FROM eshop_cats WHERE parent_id=".$parent_id." AND url='".$u."'");
    168.   while ($row = mysqli_fetch_assoc($query))
    169.     { $categories[$u]=$row['id']; $parent_id=$row['id'];}
    170.    }
    171.  
    172.   return array('c' => $categories, 'p' => $products);
    173. }
    174.  
    175. function isOldUrl($data, $mysql)
    176. {
    177.   $key = array_search('store', $data);
    178.   if(isset($data[$key+1]) && is_numeric($data[$key+1]))
    179.   {
    180.    if(strstr($_SERVER['REQUEST_URI'], '?pos=')){
    181.   $first = true;
    182.   foreach($data as $k => $d){
    183.   if( is_numeric($d) && $d && $first){
    184.   $first = false;
    185.   }elseif(is_numeric($d) && !$first){
    186.   unset($data[$k]);
    187.   }
    188.   }  }
    189.   $url = '/store';
    190.   $categoryIDS = array();
    191.   $productID = false;
    192.   foreach ($data as $u) {
    193.   if (!strstr($u, 'store') && $u) {
    194.   if (strstr($u, '?pos=')) {
    195.   // IS Product
    196.   $dataPart = explode('?pos=', $u);
    197.   $productID = isset($dataPart[1]) ? $dataPart[1] : false;
    198.   } else {
    199.   // IS category
    200.   array_push($categoryIDS, $u);
    201.   //  echo $u;
    202.   }
    203.   }
    204.   }
    205.   if(count($categoryIDS)){
    206.   $query = $mysql->query("SELECT id, url FROM `eshop_cats` WHERE id IN(".implode(',', $categoryIDS).")");
    207.   while ($q = mysqli_fetch_assoc($query)){
    208.   $url .='/'.$q['url'];
    209.   }
    210.   }
    211.   if($productID){
    212.   $query = $mysql->query("SELECT id, url FROM `eshop_pos` WHERE id =".(int)$productID." LIMIT 0,1");
    213.   $q = mysqli_fetch_assoc($query);
    214.   $url .='/'.$q['url'].'/';
    215.   }else{
    216.   $url .='/';
    217.   }
    218.   # var_dump($url);die();
    219.  header("HTTP/1.1 301 Moved Permanently");
    220.   header("Location: ".$url);exit();
    221.   }
    222. }
    223.  
    224.  
    225.  
    226. if(strstr($_SERVER['REQUEST_URI'], 'store/')) {
    227.  
    228.   $request_uri = $_SERVER['REQUEST_URI'];
    229.   $page = FALSE;
    230.   $show_by = FALSE;
    231.  
    232.   if (strstr($request_uri, '?search=')) {
    233.   $request_part = explode('?search=', $request_uri);
    234.   $request_uri = $request_part[0];
    235.   $search = $request_part[1];
    236.    $search = str_replace("/","",$search);
    237.   }
    238.  
    239.   if (strstr($request_uri, '?ymclid=')) {
    240.   $request_part = explode('?ymclid=', $request_uri);
    241.   $request_uri = $request_part[0];
    242.   $ymclid = $request_part[1];
    243.   }
    244.  
    245.   if (strstr($request_uri, '?gclid=')) {
    246.   $request_part = explode('?gclid=', $request_uri);
    247.   $request_uri = $request_part[0];
    248.   $gclid = $request_part[1];
    249.   }
    250.  
    251.   if (strstr($request_uri, '?page=')) {
    252.   $request_part = explode('?page=', $request_uri);
    253.   $request_uri = $request_part[0];
    254.   $page = $request_part[1];
    255.   }
    256.   if (strstr($request_uri, '?show_by=')) {
    257.   $request_part = explode('?show_by=', $request_uri);
    258.   $request_uri = $request_part[0];
    259.   $show_by = $request_part[1];
    260.   }
    261.  
    262.   $data = explode('/', $request_uri);
    263. //  echo $request_uri;
    264.   isOldUrl($data, $mysqli);
    265.   $find = array();
    266.   $oldUrl = FALSE;
    267.   foreach ($data as $k => $v) {
    268.   if ($v !== 'store' && $v)
    269.   {
    270.   array_push($find, $v);$oldUrl=false;
    271.   }
    272.   }
    273.  
    274.   $dbData = getUrlToID($find, $mysqli);
    275.   $uri = '/store';
    276.   foreach ($find as $k => $v) {
    277.   if (isset($dbData['c'][$v]) && $dbData['c'][$v]) {
    278.   $uri .= '/' . $dbData['c'][$v];
    279.   } elseif (isset($dbData['p'][$v]) && $dbData['p'][$v] && $k === count($find) - 1) {
    280.  
    281.  
    282.   // 404
    283.   $ch = explode('/', $_SERVER['REQUEST_URI']);
    284.   $realParts = 0;
    285.   foreach ($ch as $cc){
    286.   if($cc !=='store' && $cc){
    287.   $realParts++;
    288.   }
    289.   }
    290.   if($realParts > 2 && !$ymclid && !$gclid){
    291.   $uri = '404';
    292.   }else{
    293.   $uri = '/store' . BuildProductString($v, $mysqli);
    294.   }
    295.   break;
    296.   } else {
    297.   $uri .= 'false';
    298.   }
    299.   }
    300.   //echo $uri;
    301.   if ($page)
    302.   $uri .= '?page=' . $page;
    303.   if ($show_by)
    304.   $uri .= '?show_by=' . $show_by;
    305.   if ($ymclid)
    306.   $uri .= '?ymclid=' . $ymclid;
    307.   if ($gclid)
    308.   $uri .= '?gclid=' . $gclid;
    309.   if ($search)
    310.   $uri .= '?search=' . $search;
    311. //  echo $uri;
    312.   $_SERVER['REQUEST_URI'] = $uri;
    313. //  echo $uri;
    314.  
    315.  
    316. }


    И если можно, поясните, что поправить, чтобы я мог передавать get переменные, чтобы работала метрика от Яндекса. Спасибо. Низкий поклон всем откликнувшимся.
     
    #1 boomer546, 24 авг 2017
    Последнее редактирование модератором: 24 авг 2017
  2. TeslaFeo

    TeslaFeo Старожил

    С нами с:
    9 мар 2016
    Сообщения:
    2.989
    Симпатии:
    759
    когда-то ковырял движок с такой проблемой. Просто убирал & и всё работало.
     
  3. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.155
    Симпатии:
    1.769
    Адрес:
    :сердА
    Естественно. Ведь это компонент URL валидный. Чтобы все работало, кодируйте данные, передаваемые в запросе.
    --- Добавлено ---
    А если & должно быть? Тогда что делать бы стал? :) Проблемы решать надо, а не игнорировать.
     
  4. TeslaFeo

    TeslaFeo Старожил

    С нами с:
    9 мар 2016
    Сообщения:
    2.989
    Симпатии:
    759
    согласен.
    не помню подробностей. Помню, что нагуглил, что это устаревший кусок и его надо удалить. Удалил и заработало. Это был старый движок, и его надо было запустить на время. Так что задача была решена.
     
  5. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.155
    Симпатии:
    1.769
    Адрес:
    :сердА
  6. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.076
    Симпатии:
    1.237
    Адрес:
    там-сям
    @boomer546 убирай амперсанды в обращении к функции. они могут быть только в описании самой функции, этого достаточно для передачи по ссылке.