Laravel по-русски

Русское сообщество разработки на PHP-фреймворке Laravel.

Ты не вошёл. Вход тут.

#1 18.10.2013 10:43:56

Проверка расширений файлов

Здравствуйте, при загрузке файла exe выдает ошибку. Саму ошибку показать не могу. Работаю с Ajax результат в формfте Json.  пытаюсь вывести ошибку через jsonp в jquery  ничего не выводит, хотя любая другая ошибка выводится. И ошибка происходит только на файлах которые запускают программу. Например есть файл для удаления с расширением exe. Так его не пропускает и пишет  сообщение.  А на файл запуска реагирует своеобразно. Проверял а нескольких файлах. Реакция одинакова.

Не в сети

#2 18.10.2013 10:53:14

Re: Проверка расширений файлов

  1. Саму ошибку показать не могу.

При таком подходе что-либо сложно посоветовать. О чём хоть речь в ошибке?

Не в сети

#3 18.10.2013 13:11:25

Re: Проверка расширений файлов

Разобрался вроде. Отобразил ошибку, пишет что размер файла превышен. И сразу хотел спросить как узнать размер файла именно в laravel.

Изменено webbeg (18.10.2013 13:13:37)

Не в сети

#4 18.10.2013 13:53:15

Re: Проверка расширений файлов

Размер файла или размер лимита загрузки? Первое — File::size(), второе — ini_get('upload_max_size'), но здесь есть нюансы — советую прочитать раздел в документации, там всё понятно расписано.

Не в сети

#5 18.10.2013 14:21:23

Re: Проверка расширений файлов

Спасибо, это понятно. Вот еще вопрос. При использовании данного класса или просто функции. Выдает ошибку stat() [<a href='function.stat'>function.stat</a>]: stat failed for файл.png . Я где то читал что возможно из-за того что путь относительный, потомe-что права на файл и папку 777.  мне нужно проверить размер перед загрузкой. делал с помощью правил валидации, так вообще не реагирует на правило max. Вот правило.

public static $rulesFile = array(
	'file' => 'image|mimes:jpeg,png,jpg,gif|max:2048'
);

Не в сети

#6 18.10.2013 14:32:53

Re: Проверка расширений файлов

webbeg пишет:

Спасибо, это понятно. Вот еще вопрос. При использовании данного класса или просто функции. Выдает ошибку stat() [<a href='function.stat'>function.stat</a>]: stat failed for файл.png . Я где то читал что возможно из-за того что путь относительный, потомe-что права на файл и папку 777.  мне нужно проверить размер перед загрузкой. делал с помощью правил валидации, так вообще не реагирует на правило max. Вот правило.

public static $rulesFile = array(
	'file' => 'image|mimes:jpeg,png,jpg,gif|max:2048'
);

Вот так пока решил делать

$file = Input::file('file');
if($file-> getClientSize() > 2048){
     return Response::json(array('error'=> 'Ошибка при загрузке файла'));
}

Не в сети

#7 18.10.2013 18:09:52

Re: Проверка расширений файлов

Все же опять проблема с этими файлами, размер файла определяется, все отлично. Но проверил снова на файлах программ. Вот имеено с файлами запуска происходит ошибка  и DjVu (возможно еще какие-нибудь) теперь выдает ошибку сессии failed to start the session because headers have already be sent by причем с другими файлами нормально работают. Сессия уже существует потому-что пользователь залогинен. Сперва думал что из-за размера, но загрузил архив rar но нет, выдало обычную ошибку которую я указал. Я уже незнаю куда шагать. Кстати написал простой скрипт на php, загружаю тотже файл также ошибка сессии.

Не в сети

#8 18.10.2013 19:02:04

Re: Проверка расширений файлов

  1. Кстати написал простой скрипт на php, загружаю тотже файл также ошибка сессии.

Загружаешь сам скрипт или ошибка в скрипте, когда загружаешь через него? Покажи код. Мне пока что на ум ничего не приходит.

Не в сети

#9 19.10.2013 09:54:20

Re: Проверка расширений файлов

вот пример кода
file.php

<?php session_start(); ?>
<html>
<head>
  <title>Загрузка файлов на сервер</title>
</head>
<body>
      <h2><p><b> Форма для загрузки файлов </b></p></h2>
      <form action="upload.php" method="post" enctype="multipart/form-data">
      <input type="file" name="filename"><br> 
      <input type="submit" value="Загрузить"><br>
      </form>
</body>
</html>

upload.php

<?php session_start();?>
<html>
<head>
  <title>Результат загрузки файла</title>
</head>
<body>
<?php
   if($_FILES["filename"]["size"] > 1024*3*1024){
     echo ("Размер файла превышает три мегабайта");
   }
   if(is_uploaded_file($_FILES["filename"]["tmp_name"])){
     move_uploaded_file($_FILES["filename"]["tmp_name"], "file/".$_FILES["filename"]["name"]);
   } else {
      echo("Ошибка загрузки файла");
   }
?>
</body>
</html>

Вот еще еще такая ошибка
Warning: POST Content-Length of 9152722 bytes exceeds the limit of 8388608 bytes in Unknown on line 0

Изменено webbeg (19.10.2013 10:01:21)

Не в сети

#10 19.10.2013 13:59:26

Re: Проверка расширений файлов

  1. Warning: POST Content-Length of 9152722 bytes exceeds the limit of 8388608 bytes in Unknown on line 0

Я не зря советовал просмотреть документацию. Там даже специальный раздел есть с описанием ошибок, в том числе этой.

Не в сети

#11 19.10.2013 15:14:36

Re: Проверка расширений файлов

Эта ошибка на обычном файле,в laravel нет. В laravel с сесиями что - то. Вот такая ошиька Failed to start the session because headers have already been sent by “” at line 0

Не в сети

#12 20.10.2013 03:56:55

Re: Проверка расширений файлов

У тебя в начале скрипта есть пробелы или пустые строки? В какой кодировке сохранён скрипт? Если в UTF-8 BOM, то пересохрани в UTF-8 или ANSI, PHP не любит BOM.

Не в сети

#13 20.10.2013 09:06:14

Re: Проверка расширений файлов

У меня utf 8 без бом. Перед выводом ничего нет. Некоторые файлы грузятся хорошо, а некоторые с ошибкой.
Стоит вот такая проверка, но все равно.

if($file-> getError() == 1){
	return Response::json(array('error'=> 'Ошибка при загрузке'));
}elseif($file -> getClientSize() > 1024*2*1024){
	return Response::json(array('error'=> 'Размер файл превышает 2mb'));
}

Не в сети

#14 22.10.2013 22:57:13

Re: Проверка расширений файлов

Еще один вопросик, можно избавиться от записи redirecting to при редиректе, на просто редирект как при хедере. Без этой записи.

Не в сети

#15 23.10.2013 07:15:03

Re: Проверка расширений файлов

А чем она тебе мешает? Делай сам редирект через Location.

Не в сети

#16 23.10.2013 09:14:57

Re: Проверка расширений файлов

В принципе не мешает, но лучше бы убрать. Использую header пишет что заголовки уже отправлены.

Не в сети

#17 23.10.2013 20:43:26

Re: Проверка расширений файлов

PHP
<?php
ob_start
();
// Прочий код.

Вот только в Laravel-то как заголовки могут быть отправлены? Там используется буферизация.

Не в сети

#18 20.11.2013 17:09:05

Re: Проверка расширений файлов

Еще вопрос. Как в laravel использовать сырой запрос, что бы он вернул массив. Использую DB::raw() он возвращает только сам запрос. Как в laravel его обработать и вернуть данные из базы. делаю расширенный поиск. Очень много полей И каждый раз делать новый запрос неохота. Да и месат много занимаем. Думаю сделать так. Что вывести сам запрос а потом подставлять данные из get в Where и потом гововый запрос прогнать через метод который вернет массив полей.

public function filter_workers($data=array()){
		$where = "";
		if(isset($data['experience']) && !empty($data['experience'])){
			$where = $this -> addWhere($where, "`user_experience` = 2 Годя'");
		}
		$sql = "SELECT * FROM `jsdfsd_anketa` LEFT JOIN `jsdfsd_users` ON `jsdfsd_anketa`.`user_id` = `jsdfsd_users`.`id` LEFT JOIN `jsdfsd_country`ON `jsdfsd_users`.`user_country` = `jsdfsd_country`.`id` LEFT JOIN `jsdfsd_region`ON `jsdfsd_users`.`user_region` = `jsdfsd_region`.`id` LEFT JOIN `jsdfsd_city`ON `jsdfsd_users`.`user_city` = `jsdfsd_city`.`id`";
		if ($where) $sql .= " WHERE $where";
		return  DB::raw( $sql ); 
	
	}

Что то вроде этого.

Не в сети

#19 20.11.2013 18:46:02

Re: Проверка расширений файлов

Все разобрался как как бы.  Нужно запрос обернуть  в DB::select();

Не в сети

#20 20.11.2013 20:54:45

Re: Проверка расширений файлов

Не рекомендую строить сырой SQL — едва ли у вас там тысячи запросов в одном скрипте, а вот шансов на ошибку становится куда больше. Про SQL-инъекции не забываем. Я бы просто передавал в addWhere() сам объект запроса (Eloquent), он бы добавлял туда поля через where('a', '=', 'b') и подобные методы и всё. Нет инъекций, данные отдельно от запроса, запрос кэшируется на стороне БД. PHP собирает мусор в виде ненужных объектов. Все сыты и волки целы.

Не в сети

Подвал раздела