В OpenCart 2.0 технически возможно изменить папку для загрузки, где клиенты могут загружать файлы? В основном это определяется в config.php (как в папке root, так и в папке администратора) следующим образом:
define('DIR_UPLOAD', '/home/www/shop/system/upload/');
Можно ли просто изменить этот пункт назначения (например, на другой сервер)?
В настоящее время я использую этот код (просто измененный каталог /.../product/product.tpl):
<?php if ($option['type'] == 'file') { ?>
<!-- Button trigger modal -->
<button type="button" class="btn btn-default btn-block" data-toggle="modal" data-target="#myModal">
<i class="fa fa-upload"></i> <?php echo $button_upload; ?>
</button>
<!-- Modal -->
<div class="modal fade" id="myModal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">×</span></button>
<h4 class="modal-title" id="myModalLabel"><?php echo $button_upload; ?></h4>
</div>
<div class="modal-body embed-responsive">
<iframe height="300px" width="350px" frameborder="0" class="embed-responsive-item" src="captcha/captcha.php"></iframe>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-primary" data-dismiss="modal">Close</button>
</div>
</div>
</div>
</div>
После успешной перекодировки запускает этот index.php в iframe (выполняется на другом сервере, который является сетевым хранилищем с исправлением IP):
<!DOCTYPE html>
<html>
<body>
<form action="index.php?new_upload=true" method="post" enctype="multipart/form-data">
File to upload:
<input type="file" name="fileToUpload" id="fileToUpload"><input type="submit" value="Upload" name="submit">
</form>
<?php
if (isset($_GET['new_upload'])) {
upload();
}
function upload() {
$target_dir = "uploads/";
$target_file = $target_dir . basename($_FILES["fileToUpload"]["name"]);
$uploadOk = 1;
$fileType = pathinfo($target_file,PATHINFO_EXTENSION);
// Check if file already exists
if (file_exists($target_file)) {
echo "Sorry, file already exists.";
$uploadOk = 0; break;
}
// Check file size
if ($_FILES["fileToUpload"]["size"] > 10000000) {
echo "Sorry, your file is too large.";
$uploadOk = 0; break;
}
// Allow certain file formats
if($fileType != "jpg" && $fileType != "png" && $fileType != "jpeg" && $fileType != "pdf" && $fileType != "JPG" && $fileType != "JPEG" && $fileType != "gif" ) {
echo "Sorry, only JPG, JPEG, PNG, PDF & GIF files are allowed.";
$uploadOk = 0; break;
}
// Check if $uploadOk is set to 0 by an error
if ($uploadOk == 0) {
echo "Sorry, your file was not uploaded."; break;
// if everything is ok, try to upload file
} else {
if (move_uploaded_file($_FILES["fileToUpload"]["tmp_name"], $target_file)) {
echo "The file ". basename( $_FILES["fileToUpload"]["name"]). " has been uploaded.";
chmod($target_file, 0777); //change permission
} else {
echo "Sorry, there was an error uploading your file.";
}
}
}
?>
</body>
</html>
Это прекрасно работает, и вы можете легко загружать файлы на сервер, но я ищу лучшее решение. Это не связано с заказом и загруженным файлом, как это обычно делает opencart.
Да, это сработает, но вы должны иметь в виду некоторые вещи.
В папке он должен быть там.
Папка должна иметь соответствующие разрешения.
Это будет нормально работать.