permissions - Error starting Apache with PHP module on Windows: "Cannot load php5apache2_4.dll into server: Access is denied"

15
2014-03
  • MichaelRushton

    I'm having some difficulty installing Apache 2.4.7 with PHP 5.5.7 on Windows Vista Service Pack 2.

    When trying to start Apache, I'm getting the error:

    Syntax error on line 176 of C:/Program Files/Apache/conf/httpd.conf: Cannot load C:/Program Files/PHP/php5apache2_4.dll into server: Access is denied.

    I've looked at related topics, both on here and other sites, but the only issues I can find are where the error is "The specified procedure could not be found" or "The specified module could not be found", neither of which are relevant to my problem.

    As you can see by the download links, I'm using Win32 versions of both Apache and PHP and the thread safe version of PHP. I've made sure that the C:/Program Files/PHP/php5apache2_4.dll file exists and reinstalled the Visual C++ Redistributable (http://www.microsoft.com/en-gb/download/details.aspx?id=30679; VSU_4\vcredist_x86.exe). I've also tried moving both the Apache and the PHP folders outside of the Program Files but this didn't resolve the issue.

    As the error I'm getting is "Access is denied", I assume the issue is one of file permissions, but I'm not sure what permissions to change and what to change them to. So any assistance I can get will be much appreciated.

    Edit

    After some testing it seems that this problem only arises from PHP 5.5.4 onwards. Rolling back to 5.5.3 resolves the issue.

    Edit 2

    The issue seems to be that php5ts.dll cannot be read despite showing readable permissions. Even when programs are "run as administrator", the file cannot be opened (but can be deleted and renamed). The file can be opened if the extension is changed to something other than dll or exe, and other files in the same folder can be opened even if renamed to php5ts.dll (replacing the original).

  • Answers
  • Synetech

    Facts and Observations

    Let’s analyse the facts:

    1. It works with an extension other than typical executable/code extensions like .dll, .exe, etc.
    2. It does not work with a different filename
    3. It worked just fine with a previous version; only the latest version is having trouble
    4. It works just fine in safe-mode
    5. Safe-mode disables all non-essential drivers and service
    6. It shows no locks or open-handles
    7. It says access denied
    8. It cannot be moved, opened, copied, etc.

    Analysis

    Points 1-3 indicates that something about the contents of the file are triggering the problem. This sounds a lot like some sort of anti-virus program throwing a false-positive.

    Points 4-6 point to some sort of service or driver that is causing the problem.

    Technical

    Security software, like anti-virus programs usually have to run at a low-level to avoid letting malware sneak in, so they use drivers and run under the System process. This prevents most programs from being able to detect that a file is locked by the security program (which is why Unlocker could not find any open handles), and even if they can, they only show that System has it open which isn’t very helpful.

    Application and Explanation

    You said that you had AVG installed at one point, but uninstalled it. Apparently AVG did not uninstall completely (missed a reboot?) and so its drivers was left behind.

    So now, whenever you access a file, the driver locks it to scan, but because the rest of the program is gone, there is no way for it prompt you if it thinks the file is suspicious. If the program were still installed, it would show a prompt and ask you want to do (or more likely these days, automatically quarantine/delete the file to “protect” you). Since the program is gone, the driver component sits there waiting, while keeping the file locked.

    Since you had uninstalled AVG a while ago, it probably doesn’t have the latest definitions (if any?), so it would not be able to leave the latest version of php5ts.dll alone, and threw a false-positive, thus locking the file with no way of telling it knock it off.

    AVG

    I don’t know if AVG ever complained about this specific version of php5ts.dll when it first came out, but it doesn’t now.

    Also, I don’t know if AVG is known for having a lot of false-positives, though I’m sure I’ve read that about some AV vender; but a cursory check seems to indicate that searching for false positive has at least 33% more hits for AVG than other AV vendors.

    Advice for the Future

    This problem occurred because AVG did not uninstall completely and left remnants behind. Unfortunately this is an all–too-common problem. In the future, when uninstalling any software be it anti-virus programs, printer drivers/software, etc. always check if the vendor has provided some sort of removal/cleanup tool/utility (try different combinations of words to make sure you find it).

    Most security software and printer vendors, as well as some other software firms and hardware manufacturers will have a (usually small) program that you can download and run to wipe out all traces of their software. Unfortunately, this is usually not built into the uninstaller and must be downloaded manually from their site. Sometimes it will be in the normal parts of their site, sometimes it will be buried somewhere in their support forums. (These are usually compiled from bug-reports from people who found left-over files, registry entries, services, etc. that are left behind by the uninstaller, which is why they are separate.)

    In your case, you could have (and still should), use the AVG “remover”.

    NB: when searching for a cleanup utility for security software, be careful not to mix it up with a virus-removal tool.

  • harrymc

    Normally these kind of errors mean that you are missing a dependency that is used by php5apache2_4.dll, probably introduced in PHP 5.5.4.

    To verify which one is missing, use the Dependency Walker, that displays the missing DLLs in red color. Missing DLLs that are marked as "delayed load" are usually not a problem.

    Ensure that you do not have a 32-bit/64-bit mismatch. As everything is in C:/Program Files, I suppose that all software is 64-bit. In this case use also the 64-bit version of Dependency Walker.


  • Related Question

    Installing PHP+Apache on Windows Server with IIS+PHP simultaneously?
  • tonyhb

    I'm working for a client who rents a dedicated server running Windows Server 2008 (I'm almost certain) and has someone they know managing the server. We've built a new site built in WordPress MU and Magento which is a pain to install on IIS when I can't access the server configuration.

    We've asked the admin to install Apache on the server simultaneously, running on a different port at first until we confirm everything is alright. The thing is, he has said that PHP can only be installed for either IIS or Apache and not both. Is this right?


  • Related Answers
  • Chris Thompson

    No, that is not right. You should have separate installations of PHP for IIS and Apache so that configuration files can be adjusted for each one.

    You can have completely separate installations of PHP running for each server. In fact, there are packages you can download that have Apache+PHP+MySQL pre-packaged and ready to go. I recommend XMAPP. That would allow you to setup a separate Apache+PHP stack to use, as you said, with a different port running. You could even configure IIS or apache to act as a reverse proxy to have a certain URL point to the other server.