PHP/IIS copy()/move_uploaded_file() 无法打开流:权限被拒绝警告

Posted

技术标签:

【中文标题】PHP/IIS copy()/move_uploaded_file() 无法打开流:权限被拒绝警告【英文标题】:PHP/IIS copy()/move_uploaded_file() failed to open stream: Permission denied Warning 【发布时间】:2015-05-21 13:48:52 【问题描述】:

我对 Web 开发比较陌生,目前遇到了一个我无法解决的错误。

我在输入“http://localhost/index.html”并选择要上传的示例文件后使用 IIS 测试我的 php,它会生成以下警告:

Warning: move_uploaded_file(upload/Angela_Nie_resume_technical - EditedMW.doc): failed to open stream: Permission denied in C:\inetpub\wwwroot\test.php on line 26
Warning: move_uploaded_file(): Unable to move 'C:\Windows\Temp\php74F2.tmp' to 'upload/Angela_Nie_resume_technical - EditedMW.doc' in C:\inetpub\wwwroot\test.php on line 26

以下是与移动我的文件相关的代码。

$target_dir = "upload/"; 
$target_file = $target_dir . basename( $_FILES["uploaded"]["name"]) ; 
if(move_uploaded_file($_FILES['uploaded']['tmp_name'], $target_file))  
    echo "The file has been uploaded"; 
  
else  
    echo "Sorry, there was a problem uploading file."; 

我正在使用 Windows 8.1 并使用 IIS 来运行 localhost。提前感谢您帮助我!

【问题讨论】:

【参考方案1】:

在我的情况下,IUSR 帐户需要目标目录中的权限。不是 ISS_IUSR 帐户,只是 IUSR 帐户。

【讨论】:

工作就像一个魅力。顺便说一句,你是怎么知道的?如何找到正确的 IIS 用户来执行 php 代码? 不幸的是,这是我的反复试验。我不知道如何查找这些信息。【参考方案2】:

这意味着运行 apache 服务器的用户没有upload/ 目录的写权限。您可以右键单击该文件夹并设置向所有人写入的权限。

更新

这可能是因为您的 PHP 处于安全模式,并且不执行诸如将一个文件移动到另一个文件之类的命令。检查您的 php.ini 中的 safe_modesafe_mode_exec_dir 并进行试验。

【讨论】:

感谢您的回复!我已经为程序可能触及的每个可能的文件夹都这样做了,但它仍然无法正常工作。

以上是关于PHP/IIS copy()/move_uploaded_file() 无法打开流:权限被拒绝警告的主要内容,如果未能解决你的问题,请参考以下文章

php/iis:打开流失败:权限被拒绝

如何使用 PHP/IIS 读取 Windows 登录用户名

PHP+IIS上传大文件

PHP IIS 环境 ob_flush()刷新缓冲区执行完才显示 解决办法,iis缓冲区原因

使用 LDAP/PHP/IIS/SSL 在 Active Directory 中更改密码

PHP IIS7 MSSQL调用未定义的函数sqlsrv_connect