我正在上传带有#included
名称的图像,但图像不显示。
例如,如果我创建了一个文件名,5677PlayadelRey,#4_LR.jpg
Joomla 的文件系统无法加载它,但如果我命名5677PlayadelRey,Unit4_LR. jpg
它工作正常。
感谢提前。
我正在上传带有#included
名称的图像,但图像不显示。
例如,如果我创建了一个文件名,5677PlayadelRey,#4_LR.jpg
Joomla 的文件系统无法加载它,但如果我命名5677PlayadelRey,Unit4_LR. jpg
它工作正常。
感谢提前。
那是因为#
字符在页面上指定了一个哈希/ID。它是在 url 中使用的非法字符。
逗号,
也不应该在 url 中
您可以使用urlencode
它来确保您的文件名对于 URL 来说是安全的。
http://php.net/manual/en/function.urlencode.php
仅当您需要在 URL 中使用文件名时才可以使用它。您可以保留您想要的任何文件名。
在您处理图像的方法中:
jimport('joomla.filesystem.file');
$input = JFactory::getApplication()->input;
然后,使用
$your_photo_name = JFile::makeSafe($input->get('your_photo_name');
这将使 Joomla 可以安全使用文件名!系统
试试这个
<?php
// define a constant for the maximum upload size
define ('MAX_FILE_SIZE', 1024 * 50);
if (array_key_exists('upload', $_POST)) {
// define constant for upload folder
define('UPLOAD_DIR', '/path/to/images/');
// replace any spaces in original filename with underscores
$file = str_replace('#', '_', $_FILES['image']['name']);
// create an array of permitted MIME types
$permitted = array('image/gif', 'image/jpeg', 'image/pjpeg',
'image/png');
// upload if file is OK
if (in_array($_FILES['image']['type'], $permitted)
&& $_FILES['image']['size'] > 0
&& $_FILES['image']['size'] <= MAX_FILE_SIZE) {
switch($_FILES['image']['error']) {
case 0:
// check if a file of the same name has been uploaded
if (!file_exists(UPLOAD_DIR . $file)) {
// move the file to the upload folder and rename it
$success =
move_uploaded_file($_FILES['image']['tmp_name'], UPLOAD_DIR .
$file);
} else {
$result = 'A file of the same name already exists.';
}
if ($success) {
$result = "$file uploaded successfully.";
} else {
$result = "Error uploading $file. Please try again.";
}
break;
case 3:
case 6:
case 7:
case 8:
$result = "Error uploading $file. Please try again.";
break;
case 4:
$result = "You didn't select a file to be uploaded.";
}
} else {
$result = "$file is either too big or not an image.";
}
}
?>
如果您使用的是 Joomla,则要求所有文件名都是字母数字 + 下划线。您安装的许多插件都可能基于此假设。否则事情可能会破裂。
#
没有在 URL 中传递,所以使用任何替换为#