簡體   English   中英

move_uploaded_file無法打開流並且權限被拒絕錯誤-wamp服務器與Windows

[英]move_uploaded_file failed to open stream and Permission denied error -wamp server with windows

在Windows 7上運行Wamp

我正在嘗試通過表單將一些圖像上傳到我的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 

我的問題是我還沒有限制任何預覽,所以我不知道為什么要限制。

不帶此功能,我在哪里可以使用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>

您可以使用chmod命令設置文件夾權限,然后在php腳本文件中嘗試使用此命令。

 if( chmod($path, 0777) ) {

      move_uploaded_file($path)

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

問題是您的虛擬主機定義允許訪問"C:\\Users\\zend\\testingZend2\\public"但是您試圖將映像存儲在完全不同的文件夾C:\\Users\\test\\zend\\\\module\\guest\\src\\guest/pics/holdover/pic.jpg

盡管zend和module之間沒有雙\\\\ ,但您還必須使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目錄分隔符也是一個好主意,因為PHP會在DOS分隔符上運行時自動將其轉換為DOS分隔符。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM