2011-10-20 21 views
0

私の機能に問題があります。私はなぜそれが一方的に働いているのか他のものではないのか分かりません。不足している関数の引数を解決する方法

ここでhtmlソースに行くとhttp://adcrun.ch/ZJzVとjavascriptでエンコードされた文字列を関数に配置します。文字列を正しくデコードします。

echo js_unpack('$(34).39(4(){$(\'29.37\').7($(34).7()-$(\'6.41\').7()-($(\'6.44\').7()*2))});$(\'29.37\').39(4(){3 1=-2;3 5=4(){9(1<0){$.26(\'15://25.22/21/24.20.19\',{14:\'46\',13:{16:18,17:23}},4(40){3 28=38(\'(\'+40+\')\');9(28.12&&1!=-2){45(31);3 8=$(\'<6 48="47"><27 36="#">49</27></6><!--43.42-->\');$(\'6.41 33#35\').57().60(\'59\',\'61\').30(8);8.62(4(){$.26(\'15://25.22/21/24.20.19\',{14:\'50\',13:{63:0,16:18,17:23,58:\'\'}},4(5){3 11=38(\'(\'+5+\')\');9(11.12&&1!=-2){52.51.36=11.12.53}});8.30(\'54...\')})}32{1=10}})}32{$(\'33#35\').56(1--)}};5();3 31=55(5,64)});',10,65,explode('|','|a0x1||var|function|rr|div|height|skip_ad|if||jj|message|args|opt|http|lid|oid|4106|php|fly|links|ch|188|ajax|adcrun|post|a|j|iframe|html|si|else|span|document|redirectin|href|fly_frame|eval|ready|r|fly_head|button|end|fly_head_bottom|clearInterval|check_log|continue_button|class|Continue|make_log|location|top|url|Loading|setInterval|text|parent|ref|margin|css|6px|click|aid|1000')); 

しかし、私はそれが失敗し、私に次のエラーを与えるこのecho js_unpack($full_code);ように使用編。

ここに私が使用している私のPHPソースがあります。

//function to extract string between 2 delimiters 
function extract_unit($string, $start, $end) 
{ 
    $pos = stripos($string, $start); 
    $str = substr($string, $pos); 
    $str_two = substr($str, strlen($start)); 
    $second_pos = stripos($str_two, $end); 
    $str_three = substr($str_two, 0, $second_pos); 
    $unit = trim($str_three); 
    return $unit; 
} 

//html source 
$html = file_get_contents('http://adcrun.ch/ZJzV'); 
//extract everything beteen these two delimiters 
$unit = extract_unit($html, 'return p}(\'', '.split'); 

//full encoded strning 
$string = $unit; 
//the part here ne values ill be inserted 
$expression = "',10,65,"; 
//inserted value 
$insertvalue = "explode('|',"; 

//newly formatted encoded string 
$full_code = str_replace($expression,$expression.$insertvalue,$string).')'; 

//function to decode the previous string 
function js_unpack($p,$a,$c,$k) 
{ 
    while ($c--) 
    if($k[$c]) $p = preg_replace('/\b'.base_convert($c, 10, $a).'\b/', $k[$c], $p); 

    return $p; 
} 

//return decoded 
echo js_unpack($full_code); 
+0

'Fail'と' Warning'はPHPのエラーと同じレベルではありません。 –

+1

@ジャレッド:私はポイントはそれがちょうど...動作しないと信じています。 –

+0

@ IgnacioVazquez-Abrams - 私はそれを理解しています。私の指摘は、「間違い」が誤解を招く可能性がある(またはそうでないかもしれない)ということでした。ウィットでは、あなたのコメントは完全には啓発されていません。 ';)' –

答えて

2

私はすべてのコードを読んだわけではありませんが、最初の2つの例には基本的な違いがあります。

この行はjs_unpack関数の4つの引数渡し:

echo js_unpack('$(......);', 10, 65, explode('|', '|............')); 

をこの行はそれに1つの引数を渡す:

echo js_unpack($full_code); 

これはあなたの他の問題の根である場合、私は知りませんしかし、それは "それは第一の方法ではなく、第二の方法ではなく"働くという貧しい比較です。警告はあなたが知る必要があることを正確に伝えています。あなたは引数がありません。

編集:
あなたのコメントに基づいて、私はあなたが本当に何が起こっているか理解していないと思います。あなたは「文字列をコピーして関数に置いた」と言っています。これは間違っています。あなたが実際にコピーしたものは、1文字列、2 int、1配列でした。これらの4つの引数を関数に配置しました。

echo js_unpack( 
    $full_code      // <-- Just 1 argument 
); 

これらは同じ署名が単純ではありません。

echo js_unpack( 
    '$(......);',      // <-- Argument #1 (a long string) 
    10,        // <-- Argument #2 (int) 
    65,        // <-- Argument #3 (int) 
    explode('|', '|............') // <-- Argument #4 (array) 
); 

がしていることを比較:

は、多分それはあなたがあなたの機能をこのようにフォーマットする場合に役立ちます。いくつかのPHP関数にはdefault argument valuesがありますが、これはjs_unpackの場合と異なり、適切に呼び出されていないという非常に明確な警告が表示されます。

+0

hat 'echo js_unpack($ full_code);を使用しています。以下のコードを使用しています。それはURLに行き、コードを抽出し、最終的な文字列は '$ full_code'ですが、最初の例ではURLに手動で入力し、文字列をコピーして関数に配置しました。 – bammab

+0

@bammab私はあなたが何をしていると思いますか分かりませんが、このコードに入る前にまずPHPチュートリアルを読むことをお勧めします。 –

+0

@bammab私はあなたがその問題を認識したとは思わない。あなたの最初の例では、関数にただ1つの文字列を渡すわけではありません。 2番目の例では、あなたはそうです。 – Stephen

関連する問題