move_uploaded_file无法打开流和权限被拒绝错误-wamp服务器与Windows

时间:2014-05-07 09:32:41

标签: apache wamp wampserver

我正在运行wamp on windows 7

我正在尝试通过表单将一些图像上传到我的MVC应用程序中。我在笔记本电脑上工作,所以Wamp安装在我的笔记本电脑上

我的问题是我不断收到此消息:

 Warning: move_uploaded_file(C:\Users\test\zend\\module\guest\src\guest/pics/holdover/pic.jpg): failed to open stream: Permission denied in 

我的问题是我没有限制任何prevged所以我不知道它为什么会被限制。

没有站在这里,我在哪里可以使用我的WAMP来启用对该文件夹的访问?

先谢谢你的建议

我的代码:

file_upload的目的是将文件(当前保存在临时文件夹中)传输到另一个文件夹。它也给了一个新名字。

其他一切都有效。问题在于接收文件夹的许可;许可被拒绝

if ($form->isValid()) 
{       
    $size = new Size(array('min'=>2000)); //minimum bytes filesize

    $adapter = new \Zend\File\Transfer\Adapter\Http();
    $adapter->setValidators(array($size), $data['fileupload']['name']);
    if (!$adapter->isValid())
    {
        $dataError = $adapter->getMessages();
        $error = array();
        foreach($dataError as $key=>$row)
        {
            $error[] = $row;
        }
        $form->setMessages(array('fileupload'=>$error ));
    } 
    else
    {
        $fileName = $data['fileupload']['name']; 
        $fileTmpLoc = $data['fileupload']['tmp_name']; 
        $fileType = $data['fileupload']['type'];
        $fileSize = $data['fileupload']['size']; 
        $fileErrorMsg = $data['fileupload']['error'];
        $kaboom = explode(".", $fileName); 
        $this->fileExt = end($kaboom); 
        $this->fileName = "user_{$this->getAbbriviation($data)}{$this->getUserId()}.$this->fileExt";



        $moveResult = move_uploaded_file($fileTmpLoc, dirname(__DIR__)."/pics/member/holdover/$this->fileName");

        if ($moveResult != true)
        {
            echo "ERROR: File not uploaded. Try again.";
            unlink($this->fileTmpLoc); 
            exit();
        }
        $this->processAndUploadPhotos($data);

        //  var_dump($moveResult); die();      
        $adapter->setDestination(dirname(__DIR__).'/testImage');
        if ($adapter->receive($data['fileupload']['name'])) {
            $profile->exchangeArray($form->getData());

            echo 'Profile Name '.$profile->profilename.' upload ';
        }
    }  
}
}

重要的一点

<VirtualHost *:80>
    ServerName Zend
    DocumentRoot "C:\Users\zend\testingZend2\public"
    SetEnv APPLICATION_ENV "development"
    <Directory "C:\Users\zend\testingZend2\public">
        DirectoryIndex index.php
        AllowOverride All
        Order allow,deny
        Allow from all
    </Directory>
</VirtualHost>

2 个答案:

答案 0 :(得分:0)

您可以使用chmod命令在php脚本文件中尝试此命令来设置文件夹权限。

 if( chmod($path, 0777) ) {

      move_uploaded_file($path)

 }
 else
    echo "Couldn't do it.";

答案 1 :(得分:0)

问题是您的虚拟主机定义允许"C:\Users\zend\testingZend2\public"访问,但您尝试将图像存储在完全不同的文件夹C:\Users\test\zend\\module\guest\src\guest/pics/holdover/pic.jpg中。

不能承受zend和模块之间的双\\,你还必须让Apache访问这个其他文件夹结构。

所以你需要添加另一个<Directory..定义,以便Apache知道这个站点可以访问其他文件夹结构以及它运行的文件夹。

<VirtualHost *:80>
    ServerName Zend
    DocumentRoot "C:\Users\zend\testingZend2\public"
    SetEnv APPLICATION_ENV "development"
    <Directory "C:\Users\zend\testingZend2\public">
       DirectoryIndex index.php
       AllowOverride All
       Order allow,deny
       Allow from all
    </Directory>
    <Directory "C:/Users/test/zend/module/guest/src/guest/pics/holdover">
       Order allow,deny
       Allow from all
    </Directory>
</VirtualHost>

使用像这样的别名来执行此操作是正常的

<VirtualHost *:80>
    ServerName Zend
    DocumentRoot "C:\Users\zend\testingZend2\public"
    SetEnv APPLICATION_ENV "development"
    <Directory "C:\Users\zend\testingZend2\public">
       DirectoryIndex index.php
       AllowOverride All
       Order allow,deny
       Allow from all
    </Directory>
    Alias /pictures "C:/Users/test/zend/module/guest/src/guest/pics/holdover"
    <Directory "C:/Users/test/zend/module/guest/src/guest/pics/holdover">
       Order allow,deny
       Allow from all
    </Directory>
</VirtualHost>

这允许您使用别名,即代码中的图片而不是完整的目录名。

在任何文件/目录信息中坚持Unix目录分隔符也是一个好主意,因为如果它在DOS上运行,PHP将自动对DOS分离器进行任何必要的转换。