Depending on the version of PHP you do not need to have portable hashes. On PHP 5.3 and later, PHP ships its own bcrypt implementation if it is not available on the system. If all your servers have PHP 5.3 or higher, I highly recommend disabling portable hashes. PHPass "hashes of laptop computers" exists because, depending on the installed version of PHP, bcrypt may not be available.
However, PHPass portable hash files store salt in their hash. Therefore, each launch with the same password is different.
In addition, PHPass uses PHP_VERSION when generating these hashes * to check if the md5() function with this version $rawMode parameter. If this is not the case, pack() used to convert hexadecimal data to binary (note that this is significantly slower, but just uses $rawMode , so a branch is created).
Again, if all of your servers are running PHP 5.3 or later, I highly recommend disabling portable mode and using PHPass instead of bcrypt instead. Since PHP 5.3+ provides its own implementation when the system is unavailable, your hash will be checked in different OSs. Even if you disable portable mode, PHPass will still be smart enough to check your old hashes properly.
I was in the same situation as you, using PHPass in my structure on several sites. Since I turned off portable mode, I set my login script to gradually reuse passwords that do not use bcrypt at login.
* Line 131
EDIT:. For a more detailed explanation of how hashes are generated in portable mode (simplified, does not use the actual variables found in PHPass, but accurate). Note that PHPass uses its own base64 encoding version.
$final = '$P$'
$final .= encode64_int($rounds) (from the constructor, minimum 5 in PHP 5+, 3 others)
$final .= genSalt() (The salt is 6 bytes ... 8 bytes in the format "encode64").
$hash = md5($salt . $password)
For 2 $rounds times, do $hash = md5($hash . $password)
$final = encode64($hash)
So the final hash is essentially this:
$P$9IQRaTwmfeRo7ud9Fh4E2PdI0S3r.L0 \__________/\____________________/ \ \ \ \ Actual Hash \ \ $P$ 9 IQRaTwmf \_/ \ \______/ \ \ \ \ \ \ Salt \ \ \ \ # Rounds (not decimal representation, 9 is actually 11) \ \ Hash Header