2011-06-23 2 views
0

PHP v5.2.17 - > v5.3.5からアップグレードしたときに次のコードが壊れていて、何がわからないのですか?誰かが何が間違っている可能性についての手がかりを持っていますか?ありがとう。PHPの後のバージョンを使用するとコードが壊れる

<?php 

setlocale(LC_ALL, 'en_US.UTF8'); 

$goto = $_POST['location']; 

function toAscii($str, $replace=array(), $delimiter='-') { 
    if(!empty($replace)) { 
     $str = str_replace((array)$replace, ' ', $str); 
    } 
    $clean = iconv('UTF-8', 'ASCII//TRANSLIT', $str); 
    $clean = preg_replace("/[^a-zA-Z0-9\/_|+ -]/", '', $clean); 
    $clean = strtolower(trim($clean, '-')); 
    $clean = preg_replace("/[\/_|+ -]+/", $delimiter, $clean); 
    return $clean; 
} 
?> 

は、あらゆる種類のエラーはありませんし、私は私のCMSのログ上で見て、珍しいものは何もありません。私はセットアップに簡単なテストを行なったし、ここに何が起こるかです:

<?php 
$goto = $_POST['location']; 
function toAscii($str, $replace=array(), $delimiter='-') { 
    if(!empty($replace)) { 
    $str = str_replace((array) $replace, ' ', $str); 
    } 
    $clean = iconv('UTF-8', 'ASCII//TRANSLIT', $str); 
    $clean = preg_replace("/[^a-zA-Z0-9\/_|+ -]/", '', $clean); 
    $clean = strtolower(trim($clean, '-')); 
    $clean = preg_replace("/[\/_|+ -]+/", $delimiter, $clean); 
    return $clean; 
} 
?> 

出力は次のとおりです。<?echo toAscii($goto);?> 出力は次のとおりです。<?echo $goto;?>

I出力生フォームデータ、それは素晴らしい作品とするとき、私は、出力toAscii($goto)データを何も返しません。

+4

メッセージは何のエラーあなたは? – Swift

+1

便利なエラーメッセージが表示されますか?スタックトレース? – NullRef

+2

また興味深いことに、私はこの正確なコードを自分のPHP 5.3アプリケーションで使用しています。それはうまく動作します。おそらくiconv拡張がインストールされていないでしょうか? – Swift

答えて

2

ご質問にエラーメッセージを追加していませんが、コードには1つの非標準機能、つまりiconvのみが使用されているため、iconv extensionをインストールしていない可能性があります。

問題を解決するには、必要な拡張機能を有効にしてください。コードは、他のPHP設定からわかるように動作するはずです。

私の頭の上から拡張機能が利用可能で有効になっている場合(PHP 5.3の場合)、実際に何が壊れているのかという情報を追加する必要があります。何が目的どおりに機能していないのですか?あなたのコードの場所の上、トラブルシューティングするために


error_reporting(-1); 
ini_set('display_errors', 1); 

これは、エラーや警告が直接表示されていることを世話をします。


トラブルシューティングを続行するには、正常に機能していないルーチンに注意してください。典型的なI iconvの戻り値のチェックを追加した、同じ変数のいずれかの種類に適用することができます(テスト変数が期待されるべきものが含まれている場合)、または関数の戻り値:

function toAscii($str, $replace=array(), $delimiter='-') { 
    if(!empty($replace)) { 
    # NOTE: no need to cast to array. It's either array or string, both work 
    $str = str_replace($replace, ' ', $str); 
    } 
    # NOTE: inconv will return FALSE on error. Checking this now. 
    $result = iconv('UTF-8', 'ASCII//TRANSLIT', $str); 
    if (FALSE === $result) { 
    throw new Exception(sprintf('Iconv failed on "%s".', $str)); 
    } else { 
    $clean = $result; 
    } 

    $clean = preg_replace("/[^a-zA-Z0-9\/_|+ -]/", '', $clean); 
    $clean = strtolower(trim($clean, '-')); 
    $clean = preg_replace("/[\/_|+ -]+/", $delimiter, $clean); 
    return $clean; 
} 
+0

残念ながら、私はかなり軽量のPHPスキルを持っており、あなたの提案を試してみるためにiconv拡張をインストールする方法がわかりません。私はMAMPサーバー(本質的にMacではLAMP)を使用しています。この拡張機能を追加するにはどうすればいいですか? – Peeter

+0

既に利用可能であるかどうか最初に確認してください:コード '<?php phpinfo();で単一の.phpファイルを作成します。そこに。そのファイルをブラウザで要求すると、インストールされているすべての拡張機能が一覧表示されます。 iconvがリストの一部であるかどうかを確認します。 – hakre

+0

あなたはどんなエラーを出していますか?ただ白いページに全くエラーはありませんか? – hakre

関連する問題