Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » Разное - PHP - несколько вопросов

Ответить
Настройки темы
Разное - PHP - несколько вопросов

Аватара для ManHack

Старожил


Сообщения: 361
Благодарности: 6

Профиль | Отправить PM | Цитировать


PHP код: Выделить весь код

<?php 


$tmp_name 
' *math* '// реальный (относительный, а не абсолютный, естессно) адрес файла на сервере
$final_path $tmp_name// копия предыдущей переменной с более красивым именем


if (is_uploaded_file($_FILES['userfile']['tmp_name'])) { // Как поля USERFILE и TMP_NAME берут свои значения? пробовал вписывать вместо tmp_name следующее: $tmp_name и final_path, что приводило к ошибке (если можно, объясни мне синтаксис процедуры is_uploaded_files, я работаю с php5)
   
echo "File "$_FILES['userfile']['name'] ." uploaded successfully.\n"// Как берётся значение NAME? это тоже стандартная переменная... и что значит \n в конце строки??
   
echo "Displaying contents\n";
   
readfile($_FILES['userfile']['tmp_name']); // что делается в этой строке?
} else {
   echo 
"Possible file upload attack: "// Что имеется ввиду под атакой? Я не совсем понимаю условия процедуры is_uploaded_files. Поясните пожалуйста.
   
echo "filename '"$_FILES['userfile']['tmp_name'] . "'.";
}
move_uploaded_file($_FILES['userfile']['tmp_name'], "$final_path"); // после исполнения php-файла, загруженных файлов в указаном каталоге (допустим, папка "content") не обнаружена, т.е. процедура move не работает или я чего-то не понимаю...

$file $_FILES['$userfile']['$tmp_name'];
$getTime date("H:i:s");
$filestat = @stat($file);
$meta id3_get_tag($file); // ID3 не установлен по умолчанию в PHP. Кажется, он устанавливается из дистрибутива PEAR? Как установить PEAR на PHP5 ? (используемый php5 встроен в Denver и используется так)
$query "INSERT INTO MediaLib(id, folder, title, albumn, performer, date, filesize, link, metadata) VALUES (NULL, " $file_dir ", " $meta['title'] . "," $meta['album'] . "," $meta['artist'] . ", " $getTime ", " $filestat['size'] . ", " $final_path ", " $meta ")";
mysql_query ($query); // должна создаться новая строка в БД (2 строки подключения к MySQL-серверу и к БД в начале скрипта я пропустил, я про них помню), где id, folder, и т.д. названия заголовков столбцов в таблице, а $file_dir - это, например, значение в столбике folder таблицы.. я правильно понимая? тут нет никаких подводных камней?

?>

В итоге, как сделать, чтобы MOVE перемещала файл в папку, адрес которой задаётся из переменной $final_path, а не выводила на экран (сейчас файл загружается в текстовом виде в окно браузера).
Как установить поддержку ID3_Tags и PEAR вообще?
Под *math*понимается некоторая функция, которая смотрит сколько было файлов в последнем каталоге, и если он заполнен, меняет адрес каталога на новый. Как написать такую функцию?

Отправлено: 20:19, 05-07-2009

 

Аватара для Coutty

Кот Ти


Сообщения: 7318
Благодарности: 1204

Профиль | Отправить PM | Цитировать


PHP код: Выделить весь код

function count_files() {

  global 
$final_path;
  
$nya 0;
  if (
$handle opendir($final_path)) {
    while (
false !== ($file readdir($handle))) { 
        
$nya++;
    }
  if (
$nya 100) return $final_path "_new"// если та папка содержит больше 100 файлов, добавляем в конец имени _new
  
else return $final_path// иначе не добавляем
}

// а теперь вызываем эту функцию:
$tmp_name count_files(); 

Цитата:
if (is_uploaded_file($_FILES['userfile']['tmp_name'])) { // Как поля USERFILE и TMP_NAME берут свои значения? пробовал вписывать вместо tmp_name следующее: $tmp_name и final_path, что приводило к ошибке (если можно, объясни мне синтаксис процедуры is_uploaded_files, я работаю с php5)
userfile - это браузер посылает:
HTML код: Выделить весь код
<file name="userfile" />

tmp_name - когда файл закачивается на сервер, он закачивается во временную папку под временным именем. И в этой переменной как раз содержится этот временный путь.

Цитата:
echo "File ". $_FILES['userfile']['name'] ." uploaded successfully.\n"; // Как берётся значение NAME? это тоже стандартная переменная... и что значит \n в конце строки??
name - это оригинальное имя файла. \n - перенос строки.

Цитата:
readfile($_FILES['userfile']['tmp_name']); // что делается в этой строке?
Функция readfile() выводит файл на экран. Если не надо выводить - удалите эту строку.

Насчёт id3_tags не знаю. Как-то ставится, наверное )

Цитата:
echo "Possible file upload attack: "; // Что имеется ввиду под атакой? Я не совсем понимаю условия процедуры is_uploaded_files. Поясните пожалуйста.
Если файл загружен не полностью, то выполняется код из этого блока. Здесь просто выводится сообщение "Может быть вы злобный хацкер?"

Отправлено: 20:35, 05-07-2009 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Аватара для ManHack

Старожил


Сообщения: 361
Благодарности: 6

Профиль | Отправить PM | Цитировать


С ID3 проблема решилась (кажется) - скачать функции IDv3 (и не только v3) можно на сайте www.getid3.org (это если кому-то не хочется мучаться с PEAR ).

Спасибо за разъяснения..
Теперь вопрос на засыпку:
Как интегрировать форум vBulletin в CMS? (SilverStripeCMS v0.3.1SB, если конкретно)
Я расчитываю получить минимум умный ответ на глупый вопрос
Мне хотябы надо знать в какой последовательности и какие действия выполнять, боюсь упустить что-нибудь важное...
Автоматически запихать как модуль CMS с минимальной отладкой с моей стороны не получится? Если всё-таки получится, то каким образом это примерно делается? (а лучше точно ^_^ )

Отправлено: 22:45, 06-07-2009 | #3


Аватара для ManHack

Старожил


Сообщения: 361
Благодарности: 6

Профиль | Отправить PM | Цитировать


Код: Выделить весь код
Ошибка

SQL-запрос:

CREATE TABLE `CoreLibrary` (
`ID` INT( 5 ) UNSIGNED AUTO_INCREMENT ,
`Folder` TEXT NOT NULL ,
`Title` TEXT NOT NULL ,
`Album` TEXT NOT NULL ,
`Performer` TEXT NOT NULL ,
`Date` DATE NOT NULL ,
`FileSize` FLOAT NOT NULL ,
`Link` TEXT NOT NULL ,
`MetaData` SET NOT NULL ,
PRIMARY KEY ( `ID` )
)

Ответ MySQL: Документация
#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'NOT NULL ,
PRIMARY KEY ( `ID` )
)' at line 10
Что за неведома ошибка возникает при создании БД в MySQL? И как от неё избавиться?

Отправлено: 12:56, 07-07-2009 | #4


Аватара для ManHack

Старожил


Сообщения: 361
Благодарности: 6

Профиль | Отправить PM | Цитировать


Оказалось, ошибка возникла из-за использования типа SET в поле MetaData.
Видимо, неправильно его использую... То же самое, если тип ENUM.
Как правильно создавать поля таких типов?

Отправлено: 15:38, 07-07-2009 | #5


Аватара для Coutty

Кот Ти


Сообщения: 7318
Благодарности: 1204

Профиль | Отправить PM | Цитировать


Русскоязычная документация по MySQL. Там есть всё, что надо. И это всё легко ищется по оглавлению.

Вкратце:
... SET ("ня", "nya", "мур", "мяу") NOT NULL ...
... ENUM ("ня", "nya", "мур", "мяу") NOT NULL ...

Отправлено: 18:11, 07-07-2009 | #6


Аватара для ManHack

Старожил


Сообщения: 361
Благодарности: 6

Профиль | Отправить PM | Цитировать


Превосходно! а в чём разница между SET и ENUM? (читал на php.su, так и не понял)

Можно ли сделать так, чтобы в поле MetaData (SET или ENUM) автоматически переносились соответствующие значения из полей Title, Album, Performer?
И как адекватно искать по полю типа ENUM или SET?

Допустим, поиск по запросу "ня" в этом поле вернёт true или false?
А по запросу "мур ня"?

Отправлено: 20:27, 07-07-2009 | #7


Аватара для Coutty

Кот Ти


Сообщения: 7318
Благодарности: 1204

Профиль | Отправить PM | Цитировать


В set и enum можно заносить только те значения, которые явным образом заданы при создании таблицы.
Т.е. вы создали таблицу и указали, что могут принимать такие значения ("ня", "nya", "мур", "мяу"). Далее при добавлении строк, в это поле можно вносить только данные слова и никаких других. Это контроль со стороны СУБД. Скажем, вам нужно, чтобы в списке товаров были только Москва, Архангельск и Челябинск. И никаких Урюпинсков добавить нельзя будет.

Разница между set и enum в том, что enum допускает только 1 значение в строке ("ня", например), а set - несколько (начиная от нуля). Например: "ня","nya".

А зачем заносить значения из Title, Album, Performer ещё куда-то? Поиск от этого быстрее не станет, а база данных разрастётся. Вы можете искать нужное название сложным запросом. Скажем, ищем слово "coutty" среди этих полей, причём 'coutty' - это не полное слово. Может быть и 'coutty на отдыхе', и 'кот coutty':
Код: Выделить весь код
"SELECT * FROM `my_table` WHERE `Title` LIKE '%coutty%' OR `Album` LIKE '%coutty%' OR `Performer` LIKE '%coutty%' ORDER BY `Title`, `Album`, `Performer`";

Отправлено: 20:42, 07-07-2009 | #8


Аватара для ManHack

Старожил


Сообщения: 361
Благодарности: 6

Профиль | Отправить PM | Цитировать


Звучит хорошо... Попробую)

А если вернуться к закачке файлов на сервер... они у меня не закачиваются в Z:\tmp\ (хотя tmp_name возвращает адрес вид Z:\tmp\XXX.tmp, но такого файла в папке я не обнаруживаю и переместить несуществующий файл функцией move_uploaded_files соответственно тоже не получается)... в чём проблема?

Отправлено: 22:34, 07-07-2009 | #9


Аватара для ManHack

Старожил


Сообщения: 361
Благодарности: 6

Профиль | Отправить PM | Цитировать


Файлы загружаются ^_^
Осталась проблема с распределением их по директориям... Не догоняю условие:
PHP код: Выделить весь код

if ($handle opendir($final_path)) {
    while (
false !== ($file readdir($handle))) { 
        
$nya++; 

Проблема в том, что $nya++ никогда не происходит (хотя по логике должно) и $nya всегда остаётся в начальном значении (т.е. в нуле).

Вообще выражение "Пока ЛОЖЬ не РАВНО <ПЕРЕМЕННАЯ> присвоить функция (параметр) делать... " меня как-то пугает... уж больно неструктурно это выглядит (хотя на php.su приведён именно такой пример).

Отправлено: 02:11, 08-07-2009 | #10



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » Разное - PHP - несколько вопросов

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Разное - Несколько вопросов по PHP ManHack Программирование и базы данных 53 24-03-2009 01:23
Несколько вопросов по ОС Master WEB Общий по Linux 33 02-08-2007 23:23
Несколько вопросов raingts Хочу все знать 2 30-01-2007 18:05
Несколько вопросов barbos Общий по Linux 8 16-12-2004 20:40
Несколько вопросов по RH 9 Frost Wolf Общий по Linux 12 07-09-2003 12:51




 
Переход