![](/img/trans.png)
[英]move_uploaded_file failed to open stream: Permission denied - Mac
[英]move_uploaded_file failed to open stream and Permission denied error -wamp server with windows
我正在嘗試通過表單將一些圖像上傳到我的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.