First, as weak as sha1, it is better than unencrypted saved passwords. Any encryption, hashing or other obfuscation is much better than plaintext!
The problem with sha1 is its speed, so its hashes generated quickly. Salting helps a lot, but if your server is compromised and you have a hash that is stored somewhere in the string, this is an advantage ...
If you do not want to use mcrypt or another encryption method, you can mix your sha1 hash a bit like this:
$my_super_sha1_hash = sha1( sha1( substr( sha1($username) , 0 , strlen($password) ) ) .sha1( substr( sha1($password) , 0 , 40-strlen($password) ) ) );
By mixing username and password and using the length of the (unknown) password to determine which bits of each are used in the bite, which is then hashed again, each salt is unique but not random, so the result is consistent for all users, and LOT is more difficult to crack because it must take into account the length of the password string and username.
source share