title: Codeigntier: Unable to load the requested file: helpers/phpass_helper.php on Ubuntu 14.04
body: <p>I am trying to load Phpass helper in my base controller in order to hash my password. However, it doesn't seem to load on Ubuntu 14.04. I tried to search and some people said it probably because Linux is case sensitive, so I changed my file from phpass_helper.php to Phpass_helper.php. and loaded it by using the code below:</p>
  
  <pre><code>$this-&gt;load-&gt;helper('Phpass_helper');
  </code></pre>
  
  <p>but it's still giving me error said : Unable to load the requested file: helpers/phpass_helper.php. Does anyone know why it doesn't work? Any help would be greatly appreciated. Thanks.</p>
  
  <pre><code>class PasswordHash {
  var $itoa64;
  var $iteration_count_log2;
  var $portable_hashes;
  var $random_state;
  
  function PasswordHash($iteration_count_log2, $portable_hashes)
  {
      $this-&gt;itoa64 = './0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz';
  
      if ($iteration_count_log2 &lt; 4 || $iteration_count_log2 &gt; 31)
          $iteration_count_log2 = 8;
      $this-&gt;iteration_count_log2 = $iteration_count_log2;
  
      $this-&gt;portable_hashes = $portable_hashes;
  
      $this-&gt;random_state = microtime();
      if (function_exists('getmypid'))
          $this-&gt;random_state .= getmypid();
  }
  
  function get_random_bytes($count)
  {
      $output = '';
      if (is_readable('/dev/urandom') &amp;&amp;
          ($fh = @fopen('/dev/urandom', 'rb'))) {
          $output = fread($fh, $count);
          fclose($fh);
      }
  
      if (strlen($output) &lt; $count) {
          $output = '';
          for ($i = 0; $i &lt; $count; $i += 16) {
              $this-&gt;random_state =
                  md5(microtime() . $this-&gt;random_state);
              $output .=
                  pack('H*', md5($this-&gt;random_state));
          }
          $output = substr($output, 0, $count);
      }
  
      return $output;
  }
  
  function encode64($input, $count)
  {
      $output = '';
      $i = 0;
      do {
          $value = ord($input[$i++]);
          $output .= $this-&gt;itoa64[$value &amp; 0x3f];
          if ($i &lt; $count)
              $value |= ord($input[$i]) &lt;&lt; 8;
          $output .= $this-&gt;itoa64[($value &gt;&gt; 6) &amp; 0x3f];
          if ($i++ &gt;= $count)
              break;
          if ($i &lt; $count)
              $value |= ord($input[$i]) &lt;&lt; 16;
          $output .= $this-&gt;itoa64[($value &gt;&gt; 12) &amp; 0x3f];
          if ($i++ &gt;= $count)
              break;
          $output .= $this-&gt;itoa64[($value &gt;&gt; 18) &amp; 0x3f];
      } while ($i &lt; $count);
  
      return $output;
  }
  
  function gensalt_private($input)
  {
      $output = '$P$';
      $output .= $this-&gt;itoa64[min($this-&gt;iteration_count_log2 +
          ((PHP_VERSION &gt;= '5') ? 5 : 3), 30)];
      $output .= $this-&gt;encode64($input, 6);
  
      return $output;
  }
  
  function crypt_private($password, $setting)
  {
      $output = '*0';
      if (substr($setting, 0, 2) == $output)
          $output = '*1';
  
      $id = substr($setting, 0, 3);
      # We use "$P$", phpBB3 uses "$H$" for the same thing
      if ($id != '$P$' &amp;&amp; $id != '$H$')
          return $output;
  
      $count_log2 = strpos($this-&gt;itoa64, $setting[3]);
      if ($count_log2 &lt; 7 || $count_log2 &gt; 30)
          return $output;
  
      $count = 1 &lt;&lt; $count_log2;
  
      $salt = substr($setting, 4, 8);
      if (strlen($salt) != 8)
          return $output;
  
      # We're kind of forced to use MD5 here since it's the only
      # cryptographic primitive available in all versions of PHP
      # currently in use.  To implement our own low-level crypto
      # in PHP would result in much worse performance and
      # consequently in lower iteration counts and hashes that are
      # quicker to crack (by non-PHP code).
      if (PHP_VERSION &gt;= '5') {
          $hash = md5($salt . $password, TRUE);
          do {
              $hash = md5($hash . $password, TRUE);
          } while (--$count);
      } else {
          $hash = pack('H*', md5($salt . $password));
          do {
              $hash = pack('H*', md5($hash . $password));
          } while (--$count);
      }
  
      $output = substr($setting, 0, 12);
      $output .= $this-&gt;encode64($hash, 16);
  
      return $output;
  }
  
  function gensalt_extended($input)
  {
      $count_log2 = min($this-&gt;iteration_count_log2 + 8, 24);
      # This should be odd to not reveal weak DES keys, and the
      # maximum valid value is (2**24 - 1) which is odd anyway.
      $count = (1 &lt;&lt; $count_log2) - 1;
  
      $output = '_';
      $output .= $this-&gt;itoa64[$count &amp; 0x3f];
      $output .= $this-&gt;itoa64[($count &gt;&gt; 6) &amp; 0x3f];
      $output .= $this-&gt;itoa64[($count &gt;&gt; 12) &amp; 0x3f];
      $output .= $this-&gt;itoa64[($count &gt;&gt; 18) &amp; 0x3f];
  
      $output .= $this-&gt;encode64($input, 3);
  
      return $output;
  }
  
  function gensalt_blowfish($input)
  {
      # This one needs to use a different order of characters and a
      # different encoding scheme from the one in encode64() above.
      # We care because the last character in our encoded string will
      # only represent 2 bits.  While two known implementations of
      # bcrypt will happily accept and correct a salt string which
      # has the 4 unused bits set to non-zero, we do not want to take
      # chances and we also do not want to waste an additional byte
      # of entropy.
      $itoa64 = './ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
  
      $output = '$2a$';
      $output .= chr(ord('0') + $this-&gt;iteration_count_log2 / 10);
      $output .= chr(ord('0') + $this-&gt;iteration_count_log2 % 10);
      $output .= '$';
  
      $i = 0;
      do {
          $c1 = ord($input[$i++]);
          $output .= $itoa64[$c1 &gt;&gt; 2];
          $c1 = ($c1 &amp; 0x03) &lt;&lt; 4;
          if ($i &gt;= 16) {
              $output .= $itoa64[$c1];
              break;
          }
  
          $c2 = ord($input[$i++]);
          $c1 |= $c2 &gt;&gt; 4;
          $output .= $itoa64[$c1];
          $c1 = ($c2 &amp; 0x0f) &lt;&lt; 2;
  
          $c2 = ord($input[$i++]);
          $c1 |= $c2 &gt;&gt; 6;
          $output .= $itoa64[$c1];
          $output .= $itoa64[$c2 &amp; 0x3f];
      } while (1);
  
      return $output;
  }
  
  function HashPassword($password)
  {
      $random = '';
  
      if (CRYPT_BLOWFISH == 1 &amp;&amp; !$this-&gt;portable_hashes) {
          $random = $this-&gt;get_random_bytes(16);
          $hash =
              crypt($password, $this-&gt;gensalt_blowfish($random));
          if (strlen($hash) == 60)
              return $hash;
      }
  
      if (CRYPT_EXT_DES == 1 &amp;&amp; !$this-&gt;portable_hashes) {
          if (strlen($random) &lt; 3)
              $random = $this-&gt;get_random_bytes(3);
          $hash =
              crypt($password, $this-&gt;gensalt_extended($random));
          if (strlen($hash) == 20)
              return $hash;
      }
  
      if (strlen($random) &lt; 6)
          $random = $this-&gt;get_random_bytes(6);
      $hash =
          $this-&gt;crypt_private($password,
          $this-&gt;gensalt_private($random));
      if (strlen($hash) == 34)
          return $hash;
  
      # Returning '*' on error is safe here, but would _not_ be safe
      # in a crypt(3)-like function used _both_ for generating new
      # hashes and for validating passwords against existing hashes.
      return '*';
  }
  
  function CheckPassword($password, $stored_hash)
  {
      $hash = $this-&gt;crypt_private($password, $stored_hash);
      if ($hash[0] == '*')
          $hash = crypt($password, $stored_hash);
  
      return $hash == $stored_hash;
  }
  </code></pre>
  
  <p>}</p>
  
  <p>?></p>