你好,我一直在遵循一个教程,并努力使这个脚本工作,我已经设法解决了许多事情,但一个不变的问题,我得到的是:
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>
<<p> 上传脚本/strong> $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);
}
处理图像时,需要使用二进制格式。
FTP_BINARY代替FTP_ASCII。
按照手册:
- http://php.net/manual/en/function.ftp-put.php
确保路径是正确的。这在不同的服务器上可能有所不同。
这里还需要一个尾斜杠:
public_html/img/userPics/
^
否则,系统会将其解释为:
userPicsIMAGE.JPG
而不是预期的userPics/IMAGE.JPG
然而,您可能需要对路径本身进行处理。FTP在这方面有点棘手。
即:
-
/home/xxxxxxx/public_html/userPics/
-
img/userPics/
-
../img/userPics/
取决于文件的执行区域。
<>之前Root> ftp_file.phpimg-userPics之前文件夹还需要有适当的权限才能写入。
- 通常
755 .
使用错误报告,如果你的系统还没有设置捕获和显示错误/通知:
- http://php.net/manual/en/function.error-reporting.php
FTP手册中的示例:
<?php
ftp_chdir($conn, '/www/site/');
ftp_put($conn,'file.html', 'c:/wamp/www/site/file.html', FTP_BINARY );
?>
另一件事,使用"true"answers"false"。你最有可能想要检查真实性
$file_upload=true;
而不是字符串字面值$file_upload="true";
if($file_upload=="true")
if($file_upload==true)
和$file_upload="false";
检查false
to $file_upload=false;
阅读本手册:
- http://php.net/manual/en/language.types.boolean.php
这是最简单的类型。布尔值表示真值。可以是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上,userPics
和userpics
是不一样的,如果你的文件夹名称是小写字母。
不像Windows,它是不区分大小写的