2017-07-22 4 views
-1

私はこのソリューションをさまざまな場所で検索しましたが、私に起こった問題を解決することはできませんでした。何が起こるかというと、次のコードに実際にある:メモリが2860番で使い果たされた(else if)

[21-Jul-2017 23:35:30 UTC] PHP Parse error: memory exhausted in /home/.../public_html/folder/index.php on line 2860

が年代順に、私はオプションのいずれかが満たされた場合、多くのオプションを作成します。ここに問題のコードがあります:

<?php 

if(isset($_GET['url'])) { 
$u = $_GET['url']; 

if($u == 'old/page1.html') { 
header('Location: /new/page1.htm'); 
} if($u == 'old/page2.html') { 
header('Location: /new/page2.htm'); 
} if($u == 'old/page3.html') { 
header('Location: /new/page3.htm'); 
} if($u == 'old/page4.html') { 
header('Location: /new/page4.htm'); 
} 
//..... 
//.....(line 5691) 
} 
?> 

私は上記のコードを使用するだけで正常に動作します。しかし、コード番号5691行を使用すると、警告が表示され始め、サイトを開くことはできません。

使用するメモリの最大量に問題があると思われますが、正確にはわかりません。あなたは本当にこの方法でそれを整理する必要がある場合

+4

どのように1は、5700行のPHPファイルで終わるのでしょうか? – Kai

+0

[このリスト](http://php.net/manual/en/ref.strings.php)を見てください。 – vascowhite

+0

あなたはこのような何かをする必要がありますhttps://3v4l.org/Trf8v – vascowhite

答えて

0

とコードのものと5691行を置き換えることができ、これはおそらく良いだろう:

<?php 

if (isset($_GET['url'])) { 
    $u = $_GET['url']; 

    $redirects = [ 
     'old/page1.html' => '/new/page1.htm', 
     // ... 
    ]; 

    if (array_key_exists($u, $redirects)) { 
     $redirect = $redirects[$u]; 

     header(sprintf(
      'Location: %s', 
      $redirect 
     )); 
    } 
} 

この方法で、少なくともリダイレクトマッピングを個別に管理することができ、条件を追加する必要はありません。

あなたはまた、別のファイルにマッピングを入れることができます:

<?php 

return [ 
    'old/page1.html' => '/new/page1.htm', 
    // ... 
]; 

してからスクリプトを調整:

<?php 

if (isset($_GET['url'])) { 
    $u = $_GET['url']; 

    $redirects = require __DIR__ . '/redirects.php'; 

    if (array_key_exists($u, $redirects)) { 
     $redirect = $redirects[$u]; 

     header(sprintf(
      'Location: %s', 
      $redirect 
     )); 
    } 
} 

あなたのスクリプトを変更する必要はありません。この方法でマッピングが変更された場合。

また、elseifを使用します。

<?php 

    if (isset($_GET['url'])) { 
     $u = $_GET['url']; 

     if ($u == 'old/page1.html') { 
      header('Location: /new/page1.htm'); 
     } elseif ($u == 'old/page2.html') { 
      header('Location: /new/page2.htm'); 
     } elseif ($u == 'old/page3.html') { 
      header('Location: /new/page3.htm'); 
     } elseif ($u == 'old/page4.html') { 
      header('Location: /new/page4.htm'); 
     } 
    } 
+0

はい、これはelseif()を使用していますが、私はelse(if)で失敗しましたが失敗... –

+0

'else if'と' elseif'の違いについては、http://php.net/manual/en/control-structures.elseif.phpを参照してください。 – localheinz

0

あなたはこの

if(isset($_GET['url'])) { 
$u = $_GET['url']; 

if(substr($u, 3) === 'old'){ 
    $new = str_replace('old', 'new', $u); 
    header("Location: $new"); 
} 
+0

この変更により、何千もの行を変更するのは大変です。結局のところ、私のURLは常に同じではありません。 推奨保証は5691行まで使用できますか?私のファイルは338kbです –

+0

私は何も保証しません。あなたはここで助けを求めてきました。あなたのコードに賢明な選択肢を提案しています。少なくともそれをテストすることはできますか?あなたの実際のURLのいくつかの例を挙げると、私はそれに合ったコードを変更することができます。 __これはあなたが提供しているURLの例では間違いなく機能します.____ – vascowhite

+0

あなたの5691行のうち_all_を6だけ置き換える必要がありますので、すべてを選択して削除してください。 5分仕事:) – vascowhite