我正在运行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>
答案 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分离器进行任何必要的转换。