无法在XAMPP(Mac)中通过php上传图片

时间:2015-07-04 20:10:36

标签: php apache

我正在尝试允许用户在网站上传照片。 这是我的代码:(我已经编辑了我从在线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服务器现在甚至无法启动

1 个答案:

答案 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文件夹位于文件系统的根目录。