$this
- специальная переменная в PHP , которая не может быть назначена. Если он доступен в контексте, где он не существует, эта фатальная ошибка указывается.
Эта ошибка может возникнуть:
class Foo {
protected $var;
public function __construct($var) {
$this->var = $var;
}
public static function bar () {
// ^^^^^^
echo $this->var;
// ^^^^^
}
}
Foo::bar();
Как исправить: снова просмотрите свой код, $this
может использоваться только в контексте объекта и никогда не должен использоваться в статическом методе. Кроме того, статический метод не должен обращаться к нестатистическому свойству. Используйте self::$static_property
для доступа к статическому свойству. $this
переменная. Как исправить: Просмотрите код и замените $this
на другую переменную замещения. Вопросы, относящиеся:
Если это - Ваше собственное серверное приложение тогда, я предлагаю использовать следующий заголовок
Content-disposition: attachment; filename=fname.ext
, Это вынудит любой браузер загрузить файл и не представить его в окне браузера.
Просто звоните window.location.href = new_url
из Вашего JavaScript, и он перенаправит браузер к тому URL как он, пользователь ввел это в строку поиска
Согласовывание с методами, упомянутыми maxnk, однако, можно хотеть пересмотреть попытку автоматически вынудить браузер загрузить URL. Это может хорошо работать для двоичных файлов, но для других типов файлов (текст, PDF, изображения, видео), браузер может хотеть представить его в окне (или IFRAME) вместо сохранения на диск.
, Если действительно необходимо выполнить вызов Ajax для получения заключительных ссылок на загрузку, что относительно того, чтобы использовать DHTML для динамичного выписывания ссылки на загрузку (от ajax ответа) в страницу? Тем путем пользователь мог или нажать на него для загрузки (если двоичный) или представление в их браузере - или выберите "Сохранить Как" на ссылке для сохранения на диск. Это - дополнительный щелчок, но пользователь имеет больше контроля.
Я предлагаю сделать невидимый iframe на странице, и установить это - src к URL, который Вы получили от сервера - загрузка запустится без перезагрузки страницы.
Или можно просто установить текущий document.location.href на полученный адрес URL. Но это, может вызвать для пользователя для наблюдения ошибки, если требуемый документ на самом деле не делает существует.
Я предложил бы window.open()
открыть всплывающее окно. Если это будет загрузка, не будет никакого окна, и Вы получите свой файл. Если будет 404, или что-то, пользователь будет видеть его в новом окне (следовательно, их работа не будет побеспокоена, но они все еще получат сообщение об ошибке).