我正在尝试允许用户在网站上传照片。 这是我的代码:(我已经编辑了我从在线php教程获得的代码中的部分)
<小时/>
<form action="" method="POST" enctype="multipart/form-data">
<?php echo 'shell_exec(whoami): '.shell_exec('whoami');?>
<?php echo 'exec(whoami): '.exec('whoami');?>
<?php echo 'Current script owner: ' . get_current_user(); ?>
<input type="file" name="upload_pic"/>
<input type="submit" name="uploadpic" value="Upload Image">
</form>
<?php
if (isset($_POST['uploadpic'])) {
$target_dir = "/userSphotos";
$target_file = $target_dir . basename($_FILES["upload_pic"]["name"]);
$uploads_dir = "/uploads";
//can only upload jpeg,png,gif && under 1MB(size=1048576)
if ((($_FILES["upload_pic"]["type"]=="image/jpeg") || ($_FILES["upload_pic"]["type"]=="image/png") || ($_FILES["upload_pic"]["type"]=="image/gif"))&&($_FILES["upload_pic"]["size"] < 1048576)) { //1 Megabyte
$name = $_FILES["upload_pic"]["name"];
if ( move_uploaded_file($_FILES["upload_pic"]["tmp_name"], "$uploads_dir") ) {
echo "The file ". basename( $_FILES["upload_pic"]["name"]). " has been uploaded.";
}
else{
echo "Sorry, there was an error uploading your file.";
}
当我在chrome中运行它时,我收到错误:
警告:move_uploaded_file(/ uploads):无法打开流:
中的权限被拒绝
警告:move_uploaded_file():无法移动
抱歉,上传文件时出错。
我似乎遇到错误,因为代码无法访问具有不同所有者/用户的某些文件夹。我试图获取并编辑所有文件夹的所有者/用户,但它仍然无法正常工作。
我跑的时候
<?php echo 'shell_exec(whoami): '.shell_exec('whoami');?>
<?php echo 'exec(whoami): '.exec('whoami');?>
<?php echo 'Current script owner: ' . get_current_user(); ?>
我得到了mymac&#39;所有三条线。我认为这意味着php拥有者是mymac&#39;。我可能已经拥有了#daemon&#39;对于shell_exec(whoami)和exec(whoami)的第一次,但是当我尝试调试时,我通过终端多次编辑了东西。
在终端, 我已经尝试更改“上传”的所有者&#39;文件夹和&#39; temp&#39;文件夹到&#39; mymac&#39;通过
sudo chown
并将两个文件夹的设置更改为755:
sudo chmod -R 0755
它仍然无法正常工作 由于安全问题,我没有尝试过777。
的
ps aux | grep https
我得到了mymac&#39;在第一列中除了一行,其中&#39; root&#39;是第一个价值。再说一遍,我想我最初有过&#39; daemon&#39;,但是在httpd.conf文件中将apache用户切换到mymac后它发生了变化。
有一次,我也尝试将Apache的用户编辑为mymac&#39;在终端的pico(/private/etc/apache2/httpd.conf)的httpd.conf文件中。 它仍然无效。
总结一下,我想我拥有&#34;上传的所有拥有者/用户&#34;文件夹,&#34; temp&#34;文件夹,Apache和php广告&#39; mymac&#39;,但代码仍无权访问文件夹。
此外,重新启动我的笔记本电脑,我的Apache Web服务器现在甚至无法启动
答案 0 :(得分:0)
一个问题是move_uploaded_file()
函数的第二个参数必须是完整路径,包括文件名,而不是目录。
请参阅php.net
上的this example:
$uploaddir = '/var/www/uploads/';
$uploadfile = $uploaddir . basename($_FILES['userfile']['name']);
move_uploaded_file($_FILES['userfile']['tmp_name'], $uploadfile);
另请注意,目标路径是绝对路径。您的/uploads
文件夹位于文件系统的根目录。