2012-05-11 14 views
-1

私は安全なコードを生成するために私のクラス(thisから派生した)の関数を持っています。そして、データベースを更新してコードをページに出力するテスト関数を持っています。ジェネレータ関数は、機能的にプログラムされ、ただちに呼び出されるページ上でうまく動作しますが、CodeIgniterのクラスに入れると動作しません。ここで擬似ランダムコードを生成する

は私のジェネレータ関数である:ここで

private function createSecureCode() 
{ 

    // Get 128 pseudorandom bits in a string of 16 bytes 
    $pr_bits = ''; 

    $fp = @fopen('/dev/urandom','rb'); 
    if ($fp !== false) { 
     $pr_bits .= @fread($fp,16); 
     @fclose($fp); 
    } 

    return $pr_bits; 

} 

は私のテスト関数である:

public function test() 
{ 

$query = $this->db->get("clients"); 
$result = ""; 
    foreach($query->result() as $results) 
     { 

      $code = $this->createSecureCode(); 
      $result .= $code." - "; 
      $this->db->where("client_id", $results->client_id); 
      $this->db->update("clients", array("client_secure_code" => $code, "client_active" => 1)); 


     } 

    /*$query = $this->db->get("clients"); 
    $row = $query->first_row(); 
    print($row->client_secure_code." - ");*/ 
    print($result); 
    return $result; 

} 
+1

"私はCodeIgniterのクラスに入れてから動作しません。 - 実際に何が起こるか(起こらないか)? "private"として設定したので、 "createSecureCode()"は同じクラスにありますか? – Laurence

+0

はい、両方ともクライアントモデルにあります。 $ code変数にcreateSecureCode()を呼び出すと、$ code変数は空になります –

答えて

1

問題はCodeIgniterのは、だから、index.phpの

でやっているということリルーティングです"$ fp = @fopen( '/ dev/urandom'、 'rb');"

/home/public_html/index.php/dev/urandom 

しかし、私はあなたのファイルが保存されていると思います:

/home/dev/urandom 

ですから、このような何かをする必要があります

$fp = @fopen('../../dev/urandom','rb') 
それが間違ったディレクトリに探してますので - 失敗しています

しかし、必要に応じてサーバー/セットアップをテストして調整する必要があります

+0

私のモデルへの実際のファイルパスは '/ var/www/vhosts/username/httpdocs/library/application/model/client_model.php'です。それは '../../../../../../../../ dev/urandom'がうまくいくということですか? –

+0

いいえ - モデルへのファイルパスではなく、index.phpへのファイルパスです。これはCodeigniterがこれまでに触れたものです。だからあなたのメインの "index.php"ファイルがあるディレクトリを探してください(私はhttpdocsフォルダを推測しています) - それに相対的なパスを作成します(おそらく../dev/urandom) – Laurence

+0

アクセスをブロックしているクライアントのサーバ上のopen_basedirの制限は、/ dev/urandom以外のバイトの他のソースですか? –