Добрый день, я слежу за учебником и очень усердно работал над тем, чтобы этот скрипт работал, мне удалось исправить много вещей, однако одна постоянная проблема, которую я получаю, такова:
No such file or directory in /home/xxxxxxx/public_html/regForm.php on line 93
То, что я пытаюсь понять, – это заставить пользователя загружать профиль pic на мой живой сервер / сайт при регистрации, вот часть моей формы и код ниже:
Я был бы очень признателен, если бы более опытный пользователь мог дать ему сканирование и посоветовать, где я ошибаюсь, чем раньше
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>
UPLOAD SCRIPT
$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.
Согласно руководству:
Убедитесь, что путь правильный. Это может отличаться от разных серверов.
Здесь вам также нужен трейлинг-косая черта:
public_html/img/userPics/ ^
В противном случае ваша система будет интерпретировать это как:
userPicsIMAGE.JPG
а не предполагаемый userPics/IMAGE.JPG
Тем не менее, вам может понадобиться поиграть с самой дорогой. FTP немного сложнее.
То есть:
/home/xxxxxxx/public_html/userPics/
img/userPics/
../img/userPics/
В зависимости от области выполнения файла.
Корень> ftp_file.php -img -userPics
Папка также должна иметь соответствующие разрешения для записи.
Обычно 755.
Используйте отчет об ошибках, если ваша система еще не настроена для обнаружения и отображения ошибок / уведомлений:
Пример из руководства FTP:
<?php ftp_chdir($conn, '/www/site/'); ftp_put($conn,'file.html', 'c:/wamp/www/site/file.html', FTP_BINARY ); ?>
Другое дело, однако, использование «истинного» и «ложного». Вы, скорее всего, хотите проверить истинность
$file_upload=true;
а не строковый литерал $file_upload="true";
то же самое для
if($file_upload=="true")
в
if($file_upload==true)
и для $file_upload="false";
проверить фальшивость
to $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 userPics
не совпадает с userpics
, если ваше имя папки будет содержать строчные буквы.
В отличие от Windows, которая нечувствительна к регистру.