Я использовал Codeigniter для проекта, и я использовал довольно много библиотек, включая библиотеку File Uploading Class. Я знаю, как загрузить и настроить $config
массив для загрузки.
Я застрял в том, как при загрузке файла codeigniter сохраняется путь к файлу, он сохраняет абсолютный путь моей машины в базе данных, когда я использую $config['full_path']
, Я устанавливаю значение upload_path
в 'uploads/documents'
и в базе данных сохраняется как path/to/xampp/path/to/project/uploads/documents
, но я хочу только путь от корня моего приложения, чтобы я мог получить к нему доступ в href
как сейчас, когда я использую его, он показывает, как localhost/project/path/to/xampp/path/to/project/uploads/documents
,
Я только что понял, что неправильно понял ваш вопрос, но это работа и для FCPATH. Просто используйте его для замены, чтобы получить относительный путь:
var_dump(str_replace(FCPATH, '', $upload_path));
Это благоприятно для окружающей среды и будет работать на нескольких машинах.
Я не смог протестировать свой код, потому что сейчас я на своем мобильном телефоне, но не стесняйтесь задавать дополнительные вопросы относительно моего решения
Оригинальный ответ под этой строкой, возможно, он экономит время и содержит дополнительную информацию об именах констант:
Используйте CodeIgniter, заданные константы для этого задания.
FCPATH
ссылки на тот же каталог, где находится ваш index.php и APPPATH
ссылки на вашу папку приложений.
Это благоприятно для окружающей среды и сэкономит вам некоторую работу, если вы перенесете свой проект на другой сервер.
Вот пример:
$config['upload_path'] = FCPATH . 'uploads/documents';
$this->load->library('upload', $config);
Это указывало бы на мой случай: /var/www/myapp/uploads/documents
Обратите внимание, что это работает только в том случае, если вы не загружаете библиотеку загрузки автоматически. Если вы проверяете метод initialize в загружаемых документах класса.
https://www.codeigniter.com/userguide3/libraries/file_uploading.html#setting-preferences
Я не вижу белья на моем мобильном телефоне, но обе константы определены в index.php, и вам стоит посмотреть, что они содержат:
https://github.com/bcit-ci/CodeIgniter/blob/develop/index.php
В constants.php
в /config
Я определил ROOT
как:
define('ROOT', realpath($_SERVER['DOCUMENT_ROOT']));
вы могли бы, вероятно, использовать FCPATH
Я просто предпочитаю использовать свою собственную, если мне нужно что-то изменить.
Затем я использую эту функцию в моей модели обработчика изображений:
/**
* Replaces ROOT in path with empty value
* /var/www/images/this.jpg to /images/this.jpg when /var/www is ROOT
*
* @param string $path
* @return string Rel path
*/
public function get_rel_path($path) {
return str_replace('\\', '/', str_replace(ROOT, '', $path));
}
и сохранить /images/this.jpg
в базе данных, поэтому мне не нужно вызывать эту функцию всякий раз, когда я хочу отобразить изображение. Если вам нужно проверить, существует ли файл, просто if(is_file(ROOT . $somefilefromdb)) { }
Для загрузки и всего, что требует полного пути, просто используйте ROOT . '/uploads/'