上传图片时出错,没有这样的路径或目录

时间:2015-09-04 03:29:21

标签: php forms

美好的一天,我一直在关注一个教程并且非常努力地使这个脚本工作,我已经设法解决了很多问题但是我得到的一个常见问题是:

No such file or directory in /home/xxxxxxx/public_html/regForm.php on line 93

我想要的是让用户在注册时将个人资料照片上传到我的直播服务器/网站,这是我的表格和下面代码的一部分:

如果有经验的用户可以进行扫描并告知我出错的地方,我会非常感激,提前

HTML表格

 <form ENCTYPE="multipart/form-data" name="registration-form" id="regForm" method="post" action="regForm.php">
 :
 :
Upload Picture: <INPUT NAME="file_up" TYPE="file">
<input type="submit"  value="Register" name="register" class="buttono" />
</form>

上传脚本

$file_upload="true";
$file_up_size=$_FILES['file_up']['size'];
echo $_FILES['file_up']['name'];

if ($_FILES['file_up']['size']>250000){
    $msg=$msg."Your uploaded file size is more than 250KB
 so please reduce the file size and then upload.<BR>";
$file_upload="false";
}

if (!($_FILES['file_up']['type'] =="image/jpeg" OR $_FILES['file_up']['type'] =="image/gif"))
{
    $msg=$msg."Your uploaded file must be of JPG or GIF. Other file types are not allowed<BR>";
$file_upload="false";
}

$file_name=$_FILES['file_up']['name'];

if($file_upload=="true"){

$ftp_server = "xxxxxx";
$ftp_conn = ftp_connect($ftp_server) or die("Could not connect to $ftp_server");
$ftp_username='xxxxxx';
$ftp_userpass='xxxxxx';
$login = ftp_login($ftp_conn, $ftp_username, $ftp_userpass);

$file = $file_name;

// upload file
if (ftp_put($ftp_conn, "public_html/img/userPics", $file, FTP_ASCII)) //here is the problem with the path I suspect
  {
  echo "Successfully uploaded $file.";
  }
else
  {
  echo "Error uploading $file.";
  }

// close connection
ftp_close($ftp_conn);   
}

1 个答案:

答案 0 :(得分:3)

处理图像时,需要使用二进制格式。

FTP_BINARY而不是FTP_ASCII。

根据手册:

确保路径正确。这可能因服务器不同而不同。

您还需要一个尾部斜杠:

public_html/img/userPics/
                        ^

否则,您的系统会将其解释为:

userPicsIMAGE.JPG而不是预期的userPics/IMAGE.JPG

然而,你可能需要玩弄路径本身。 FTP就是这样有点棘手。

即:

  • /home/xxxxxxx/public_html/userPics/
  • img/userPics/
  • ../img/userPics/

取决于文件的执行区域。

Root > ftp_file.php  
-img  
   -userPics

该文件夹还需要具有要写入的适当权限。

FTP手册中的一个例子:

<?php 
ftp_chdir($conn, '/www/site/'); 
ftp_put($conn,'file.html', 'c:/wamp/www/site/file.html', FTP_BINARY ); 
?>

另一方面,使用&#34; true&#34;和&#34;假&#34;。你很可能想要检查真相

$file_upload=true;

而不是字符串文字$file_upload="true";

同样的事情

if($file_upload=="true")

if($file_upload==true)

$file_upload="false";检查虚假

$file_upload=false;

阅读本手册:

  

这是最简单的类型。布尔值表示真值。它可以是TRUE或FALSE。

测试您的FTP连接,从https://stackoverflow.com/a/3729769/

拉出
try {
    $con = ftp_connect($server);
    if (false === $con) {
        throw new Exception('Unable to connect');
    }

    $loggedIn = ftp_login($con,  $username,  $password);
    if (true === $loggedIn) {
        echo 'Success!';
    } else {
        throw new Exception('Unable to log in');
    }

    print_r(ftp_nlist($con, "."));
    ftp_close($con);
} catch (Exception $e) {
    echo "Failure: " . $e->getMessage();
}

命名约定:

我还需要注意,在LINUX上,userPicsuserpics不同,如果您的文件夹名称是小写字母。

与Windows不同,后者不区分大小写。