#!/usr/bin/python
# -*- coding: utf-8 -*-
import sys, commands, time, datetime
#read is dev is attach??
def checkdev():
a = commands.getoutput('vboxmanage showvminfo officexp | grep MF4010')
if a:
mylog("Есть устройство")
sys.exit()
def getUUID():
uuid = commands.getoutput('vboxmanage list usbhost | grep UUID').split(' ')[-1]
if not uuid:
mylog("Устройство не подключено физически к компьютеру или выключено")
sys.exit()
mylog(uuid)
return uuid
def addUUIDtoVBox():
uuid = getUUID()
mylog("Подключаю устройство "+uuid+" к виртуальной машине")
command = 'vboxmanage controlvm officexp usbattach '+uuid
uuid = commands.getoutput(command)
def mylog(mess):
mess = datetime.datetime.now().__str__()+" "+mess+"\n"
print mess
f = open("/home/serg/pub/scanner/scannerlog.txt", 'a')
f.write(mess)
f.close()
while 1:
checkdev()
time.sleep(0.5)
addUUIDtoVBox()
time.sleep(1)
P.S. Это писалось из-за того, что у девайса меняется UUID. И немаловажный нюанс - девайс один единственный. Для большего количества надо немного изменить getUUID()
вторник, 10 июля 2012 г.
Attach USB dev to VirtualBox in cron
воскресенье, 17 июня 2012 г.
шпаргалка по Python
Не судите строго, тут будут вещи которыми я пользуюсь редко и постоянно вспоминаю их тратя время...
Способы удалить повторяющиеся элементы:
1. Единственный минус - не сохраняется порядок элементов.
Автоматическое определение кодировки.
Способы удалить повторяющиеся элементы:
1. Единственный минус - не сохраняется порядок элементов.
myList = list(set(myList))
Автоматическое определение кодировки.
маленькая шпаргалка по sql
Удалить все дублирующие записи из таблицы products
DELETE FROM products WHERE id NOT IN (SELECT MIN(id) FROM products GROUP BY столбец(ы) с повторяющимися данными)
четверг, 31 мая 2012 г.
Linux, конвертируем mkv в avi
Данная статья - это кросспостинг с http://my.runtu.org/blog/hawk/linux-konvertiruem-mkv-v-avi
Оригинал статьи ,доступен для прочтения здесь: http://unixa.ru/linux/linux-konvertiruem-mkv-v-avi.html
********************************************
Модно стало последнее время фильмы в mkv загонять, но к сожалению данный формат не понимают большинство DVD плееров. Благо есть Linux, в котором делается все это очень просто и легко одной командой:
mencoder /path/file.mkv -oac mp3lame -ovc copy -o /path/file.avi
Команда перекодирует mkv-файл в mpeg4 с mp3 звуком.Если mencoder не установлен, то исправим это:
На самом деле mencoder имеет множество опций, почитать о которых можно в man mencoder.$sudo apt-get install mencoder
Можно например перекодировать видео XVIDом (должен присутствовать в системе) с нужным битрейдом:
$mencoder /path/file.mkv -oac mp3lame -ovc xvid -xvidencopts vhq=1:bitrate=1250 -o /path/file.avi
Можно еще поколдовать с опциями и к примеру обрезать черные поля с
помощью фильтра crop, а с помощью scale можно смаштабировать картинку и
т.д.суббота, 12 мая 2012 г.
ReSize fotos in folder в 10 потоков
#coding: UTF-8
import threading, Queue, os
from PIL import Image
queue = Queue.Queue() # создаем очередь
THREADS = 10
for i in os.listdir('.'):
if i.split('.')[-1] == 'JPG':
queue.put(Image.open(i))
def chage_file(img):
#узнать ориентацию файла
print 'Открытие файла ' + img.filename
i_size = img.size
if i_size[0] > i_size[1]: # если больше то 800х600
#изменить размер
r_img = img.resize((800,600), Image.ANTIALIAS)
else:
r_img = img.resize((600,800), Image.ANTIALIAS)
#переименовать и сохранить
print 'Сохранение файла' + img.filename
r_img.save('NEW_'+img.filename)
def repeat():
while True:
try:
item = queue.get_nowait() # ждём данные
except Queue.Empty:
break
chage_file(item) # передаем данные в нашу функцию
#time.sleep(0.5)
queue.task_done() # задача завершена
for tr in xrange(THREADS):
t = threading.Thread(target=repeat) # создаем нить
t.start()
queue.join()
четверг, 10 мая 2012 г.
ReSize fotos in folder
#coding: UTF-8
from PIL import Image
import os
def chage_file(img):
#узнать ориентацию файла
print 'Открытие файла ' + img.filename
i_size = img.size
if i_size[0] > i_size[1]: # если больше то 800х600
#изменить размер
r_img = img.resize((800,600), Image.ANTIALIAS)
else:
r_img = img.resize((600,800), Image.ANTIALIAS)
#переименовать и сохранить
print 'Сохранение файла'
r_img.save('NEW_'+img.filename)
def resize_file(orientation, img):
print 'Изменение размера файла'
if orientation:
return img.resize((800,600), Image.ANTIALIAS)
else:
return img.resize((600,800), Image.ANTIALIAS)
kolvo_files = 0
for i in os.listdir('.'):
if i.split('.')[-1] == 'JPG':
kolvo_files += 1
chage_file(Image.open(i))
print "Количество обработанных файлов = ", kolvo_files
среда, 21 декабря 2011 г.
Первый опыт PyQt4
pyuic4 название_файла_с_кодом.py -o шаблон.ui
# -*- coding: utf-8 -*-
# Form implementation generated from reading ui file 'dialog1.ui'
#
# Created: Thu Dec 22 00:40:39 2011
# by: PyQt4 UI code generator 4.7.3
#
# WARNING! All changes made in this file will be lost!
from PyQt4 import QtCore, QtGui
class Ui_MainDialog(object):
def setupUi(self, MainDialog):
MainDialog.setObjectName("MainDialog")
MainDialog.resize(400, 300)
self.newDialogButton = QtGui.QPushButton(MainDialog)
self.newDialogButton.setGeometry(QtCore.QRect(300, 260, 90, 27))
self.newDialogButton.setObjectName("newDialogButton")
self.retranslateUi(MainDialog)
QtCore.QMetaObject.connectSlotsByName(MainDialog)
def retranslateUi(self, MainDialog):
MainDialog.setWindowTitle(QtGui.QApplication.translate("MainDialog", "Main Dialog", None, QtGui.QApplication.UnicodeUTF8))
self.newDialogButton.setText(QtGui.QApplication.translate("MainDialog", "New Dialog", None, QtGui.QApplication.UnicodeUTF8))
# -*- coding: utf-8 -*-
# Form implementation generated from reading ui file 'dialog2.ui'
#
# Created: Thu Dec 22 00:40:51 2011
# by: PyQt4 UI code generator 4.7.3
#
# WARNING! All changes made in this file will be lost!
from PyQt4 import QtCore, QtGui
class Ui_SecondDialog(object):
def setupUi(self, SecondDialog):
SecondDialog.setObjectName("SecondDialog")
SecondDialog.resize(400, 300)
self.retranslateUi(SecondDialog)
QtCore.QMetaObject.connectSlotsByName(SecondDialog)
def retranslateUi(self, SecondDialog):
SecondDialog.setWindowTitle(QtGui.QApplication.translate("SecondDialog", "Dialog", None, QtGui.QApplication.UnicodeUTF8))
import sys from PyQt4 import QtGui, QtCore from dialog1 import Ui_MainDialog from dialog2 import Ui_SecondDialog class MainDialig(QtGui.QWidget): def __init__(self, parent=None): super(MainDialig,self).__init__(parent) self.secondDialog = SecondDialog(parent) self.ui = Ui_MainDialog() self.ui.setupUi(self) self.ui.newDialogButton.clicked.connect(self.showSecondDialog) def showSecondDialog(self): self.secondDialog.show() class SecondDialog(QtGui.QWidget): def __init__(self, parent=None): super(SecondDialog,self).__init__(parent) self.ui = Ui_SecondDialog() self.ui.setupUi(self) def main(): app = QtGui.QApplication(sys.argv) mainWindow = MainDialig() mainWindow.show() sys.exit(app.exec_()) if __name__=='__main__': main()
from dialog1 import Ui_MainDialog from dialog2 import Ui_SecondDialog
class MainDialig(QtGui.QWidget): def __init__(self, parent=None): super(MainDialig,self).__init__(parent)
self.secondDialog = SecondDialog(parent)
self.ui = Ui_MainDialog() self.ui.setupUi(self)
self.ui.newDialogButton.clicked.connect(self.showSecondDialog)
def showSecondDialog(self):
self.secondDialog.show()
class SecondDialog(QtGui.QWidget): def __init__(self, parent=None): super(SecondDialog,self).__init__(parent) self.ui = Ui_SecondDialog() self.ui.setupUi(self)
def main(): app = QtGui.QApplication(sys.argv) mainWindow = MainDialig() mainWindow.show() sys.exit(app.exec_()) if __name__=='__main__': main()
mainWindow = MainDialig() mainWindow.show()
import sys from PyQt4 import QtGui, QtCore from dialog1 import Ui_MainDialog class MainDialig(QtGui.QWidget): def __init__(self, parent=None): super(MainDialig,self).__init__(parent) self.ui = Ui_MainDialog() self.ui.setupUi(self) ############## #Добавление функционала к элементам окна ############## def main(): app = QtGui.QApplication(sys.argv) mainWindow = MainDialig() # знак "=" не зря не выделен. Дело в том, что такая строка обязательна, но меняется то, что выделено. mainWindow.show() sys.exit(app.exec_()) if __name__=='__main__': main()
среда, 9 марта 2011 г.
netbeans если ШГ
Запускать netbeans, чтоб не ШГ, т.е. со сглаживанием и т.д. надо такой командой:
netbeans -J-Dswing.aatext=true -J-Dawt.useSystemAAFontSettings=lcd_hrgb
воскресенье, 6 марта 2011 г.
Sorry, there have been more than 5 failed login attempts for this account. It is temporarily blocked.
Гуглил-гуглил-гуглил.... и нашел ответ. Надо удалить все записи из таблицы flood:
DELETE FROM flood;
Drupal 7 восстановление пароля
Столкнулся с проблемой восстановления пароля в drupal 7. Помню в 6ке пароли хешировались в md5, а в 7ке в sha512. Если есть доступ к БД друпала то все просто. В папке ./scripts лежит скрипт password-hash.sh. Использовать его крайне просто:
password-hash.sh "новый_пароль"Потом поменять в таблице users хеш пароля для своего пользователя.
суббота, 12 февраля 2011 г.
ZTE 100 и ubuntu 10.04 в офлайне
Для начала нужно скачать и установить на целевой ноутбук 4 пакета:
и скрипт для настройки
Теперь нужно открыть папку куда скопировались файлы и запустить их, кроме скрипта, с конца по очереди.
Теперь настройка.
Нужно зайти под учетной записью sudo пользователя. Открыть консоль Приложения->Стандартные->Терминал и ввести
sudo mc
Система предложет ввести пароль. Введите пароль пользователя. Что бы вводить команды нужно нажать ctrl+O которая скроет обе панели mc.
Теперь по порядку:
1. Включаем модем, он определяется как USB CD-ROM диск, автомонтируется на /dev/scd0 (у вас номер устройства может быть другим) на котором софт для windows. Oтключаем:
Для проверки нужно выполнить:
2.1 Если модем периодически отключается то переключаем модем в режим только модема, при этом отключается кардридер и доступ к USB CD-ROM диску. Введите команду:
Все, теперь можно настроить соединение через NetworkManager.
Более подробно смотрите в первоисточнике
и скрипт для настройки
Теперь нужно открыть папку куда скопировались файлы и запустить их, кроме скрипта, с конца по очереди.
Теперь настройка.
Нужно зайти под учетной записью sudo пользователя. Открыть консоль Приложения->Стандартные->Терминал и ввести
sudo mc
Система предложет ввести пароль. Введите пароль пользователя. Что бы вводить команды нужно нажать ctrl+O которая скроет обе панели mc.
Теперь по порядку:
1. Включаем модем, он определяется как USB CD-ROM диск, автомонтируется на /dev/scd0 (у вас номер устройства может быть другим) на котором софт для windows. Oтключаем:
$ eject /dev/scd0светодиод на модеме отключается, через некотрое время загарается опять, теперь он определился как модем, появилоси новые устройства:
/dev/ttyUSB0инет работает на /dev/ttyUSB2
/dev/ttyUSB1
/dev/ttyUSB2
Для проверки нужно выполнить:
$ ls /dev | grep ttyUSB2. Если модем работает стабильно, то просто отключаем автозагрузку USB CD-ROM диска воспользовавшись скриптом введите команду (вы должны находится в той же папке где файл mf100.pl):
$ ./mf100.pl cdstop
2.1 Если модем периодически отключается то переключаем модем в режим только модема, при этом отключается кардридер и доступ к USB CD-ROM диску. Введите команду:
$ ./mf100.pl modem3. Последнее, надо сконфигурировать файл wvdial.conf:
mcedit /etc/wvdial.confи втавить в него примерно следующее
[Dialer Defaults]
Init1 = ATZ
Init3 = AT+CGDCONT=1,"IP","www.ab.kyivstar.net"
#Init3 = AT+CGDCONT=1,"IP","www.xl.kyivstar.net"
Init2 = ATQ0 V1 E1 S0=0 &C1 &D2 +FCLASS=0
Phone = *99#
ISDN = 0
Stupid Mode = 1 # необходимо для этого модема
Auto Reconnect = 0
Idle Seconds = 0
Username = igprs
Password = internet
Modem Type = USB Modem
Modem = /dev/ttyUSB2
Boud = 9600Все, теперь можно настроить соединение через NetworkManager.
Более подробно смотрите в первоисточнике
среда, 8 декабря 2010 г.
Настройка принтера Canon LBP1120 в ubuntu 10.04
6. Регистрируем принтер в установочном файле ccpd-демона:
Вся настройка проводится при выключенном принтере.
Итак, начнем)
1. Надо скачать дровишки с сайте Canon. Нам нужна последняя версия драйверов, а именно 2.0.
2. Надо распаковать архив, в папке Driver, есть пакеты для Дебиана.
3. Сначала нужно установить cndrvcups-common_2.00-2_i386.deb, а потом cndrvcups-capt_2.00-2_i386.deb.
4. Перезапускаем CUPS:
Итак, начнем)
1. Надо скачать дровишки с сайте Canon. Нам нужна последняя версия драйверов, а именно 2.0.
2. Надо распаковать архив, в папке Driver, есть пакеты для Дебиана.
3. Сначала нужно установить cndrvcups-common_2.00-2_i386.deb, а потом cndrvcups-capt_2.00-2_i386.deb.
4. Перезапускаем CUPS:
sudo /etc/init.d/cups restart
5. Регистрируем принтер в системе:
sudo /usr/sbin/lpadmin -p LBP1120 -m CNCUPSLBP1120CAPTK.ppd -v ccp:/var/ccpd/fifo0 -E
6. Регистрируем принтер в установочном файле ccpd-демона:
sudo /usr/sbin/ccpdadmin -p LBP1120 -o /dev/usb/lp0
7. Запускаем ccpd:
sudo /etc/init.d/ccpd start
8. Добавляем ccpd в автозагрузку:
sudo update-rc.d ccpd defaults 20
9. Перезагружаем компьютер и в момент, когда появились белые строчки БИОСа или картинка с брендом вашей материнской платы включите принтер.
10. Зайдите в Система-Администрирование-Печать и там будут(почему непонятно), либо 1, либо 2 принтера. Если 2 (LBP1120 и LBP1120-2), то выбираем первый и устанавливаем его по умолчанию.
11. Что бы увидеть состояние принтера, нужно ввести команду:
10. Зайдите в Система-Администрирование-Печать и там будут(почему непонятно), либо 1, либо 2 принтера. Если 2 (LBP1120 и LBP1120-2), то выбираем первый и устанавливаем его по умолчанию.
11. Что бы увидеть состояние принтера, нужно ввести команду:
captstatusui -P LBP1120
Этот способ настройки принтеров Canon работает не только для модели 1120, а так же и для 2900 и подобных. В исходной статье как раз и рассматривается настройка модели 2900.
воскресенье, 21 ноября 2010 г.
eclipce и С++
Для работы с С++ в eclipce естественно нужно поставить плагин. Этот плагин называется CDT. Для установки сего плагина нужно добавить его репозиторий в пункте Install New Software... В адресе нужно указать
Теперь главное, чтоб в вашей системе стояли компилятор, дебагер и утилита make, иначе будет выдовать ошибки при компиляции и ругаться.
Для linux это gcc, gdb, make.
http://download.eclipse.org/tools/cdt/releases/heliosВот и все)
Теперь главное, чтоб в вашей системе стояли компилятор, дебагер и утилита make, иначе будет выдовать ошибки при компиляции и ругаться.
Для linux это gcc, gdb, make.
суббота, 13 ноября 2010 г.
Насторойкак VirtualHosts в Apache2 и Django+eclipse
Чтобы работать с django, комфортно работать, нужно установить eclipce+Aptana plugin+ PyDev.
1. Установка eclipse
В меню Help нужно выбрать пункт Install New Software...
Нажать кнопочку Add... и по очереди создать 2 записи. Одну для Aptana, другую для PyDev. То что нужно писать в адресе:
А далее: далее, далее, далее...))
2. Настройка Apache2
Если сервер не установлен, то нужно естественно его установить
4. Создаем проект с названием second в eclipse.
Нажать New->Project... А дальше как на картинках)
5. Создание виртуального хоста.
В папке /etc/apache2/sites-available/ требуется создать файл с названием second.
DocumentRoot /home/username/workspace/second/src/second/
ServerAdmin mymail@mail
ServerName second.ua
WSGIScriptAlias / /home/username/workspace/second/src/second/apace/django.wsgi
WSGIDaemonProcess username processes=2 maximum-requests=5 threads=1
WSGIProcessGroup usergroup
ErrorLog "|/usr/sbin/rotatelogs /var/log/apache2/cargo.error.%Y-%m-%d.log 86400"
CustomLog "|/usr/sbin/rotatelogs /var/log/apache2/cargo.access.%Y-%m-%d.log 86400" combined
ServerSignature On
Надо понимать, что username это имя пользователя. Соответственно usergroup имя группы.
Делаем хост рабочим:
Теперь можно перезапустить apache и посмотреть что получилось)
1. Установка eclipse
sudo aptitude install eclipse2. Установка Aptana и PyDev
В меню Help нужно выбрать пункт Install New Software...
Нажать кнопочку Add... и по очереди создать 2 записи. Одну для Aptana, другую для PyDev. То что нужно писать в адресе:
http://download.aptana.com/tools/studio/plugin/install/studioПосле, в предыдущем окне нужно поставить галочку.
http://pydev.org/updates
А далее: далее, далее, далее...))
2. Настройка Apache2
Если сервер не установлен, то нужно естественно его установить
sudo aptitude install apache2также нужно установить модуль, для работы python'a и собственно django с apache.
sudo aptitude install libapache2-mod-wsgiБлаго в ubuntu все модули, установленные пакетным менеджером, прописываются в конфигах сервера автоматически.
4. Создаем проект с названием second в eclipse.
Нажать New->Project... А дальше как на картинках)
5. Создание виртуального хоста.
В папке /etc/apache2/sites-available/ требуется создать файл с названием second.
sudo vim /etc/apache2/sites-available/secondВ нем пишем примерно следующее:
DocumentRoot /home/username/workspace/second/src/second/
ServerAdmin mymail@mail
ServerName second.ua
WSGIScriptAlias / /home/username/workspace/second/src/second/apace/django.wsgi
WSGIDaemonProcess username processes=2 maximum-requests=5 threads=1
WSGIProcessGroup usergroup
ErrorLog "|/usr/sbin/rotatelogs /var/log/apache2/cargo.error.%Y-%m-%d.log 86400"
CustomLog "|/usr/sbin/rotatelogs /var/log/apache2/cargo.access.%Y-%m-%d.log 86400" combined
ServerSignature On
Надо понимать, что username это имя пользователя. Соответственно usergroup имя группы.
Делаем хост рабочим:
sudo a2ensite secondТеперь файл django.wsgi.
cd /home/funtifree/workspace/second/src/second/и в него нужно записать следующее:
mkdir apache
cd apache
vim django.wsgi
os.environ['DJANGO_SETTINGS_MODULE'] = 'first.settings'Все!!!
import django.core.handlers.wsgi
application = django.core.handlers.wsgi.WSGIHandler()
path = '/home/username/workspace/second/src/'
if path not in sys.path:
sys.path.append(path)
path1 = '/home/username/workspace/second/src/second/'
if path1 not in sys.path:
sys.path.append(path)
Теперь можно перезапустить apache и посмотреть что получилось)
sudo /etc/init.d/apache2 reload
четверг, 16 сентября 2010 г.
Postgresql в Windows. Установка и импорт старой базы.
Установка нового сервера.
Через "Управление" в Моем компьютере создаем пользователя postgres. Копируем PostgerSQL на диск C. Для этого надо определится с версией и скачать архив с названием postgresql-x.x.x-binaries-no-installer.zip ее скачать отсюда.
Ок. Теперь надо инициализировать кластер. Для этого надо открыть консоль от пользователя postgres. Нажимаем Пуск->Выполнить и вводим
Создаем службу. Для этого нужно запустить консоль от имени администратора.
Если предполагается подключение из локальной сети, то нужно изменить некоторые настройки. Во-первых надо открыть файл c:\pg_data\pg_hda.conf. В нем найти строку
Теперь самое интересное. Импорт старой базы. Если импорт производился правильно, т.е. так:
Через "Управление" в Моем компьютере создаем пользователя postgres. Копируем PostgerSQL на диск C. Для этого надо определится с версией и скачать архив с названием postgresql-x.x.x-binaries-no-installer.zip ее скачать отсюда.
Ок. Теперь надо инициализировать кластер. Для этого надо открыть консоль от пользователя postgres. Нажимаем Пуск->Выполнить и вводим
runas /user:postgres cmdПоявится окошко с запросом пароля пользователя postgres. Теперь собственно инициализация кластера.
c:\pgsql\bin\initdb.exe -E win1251 -D c:\pg_dataФайлы базы данных будут хранится в папке c:\pg_data, включая и файлы настройки доступа. После успешной инициализации кластера предагается его запустить парой способов. Но в windows есть службы, которыми гораздо удобнее пользоваться чем скриптами запуска в автозагрузке.
Создаем службу. Для этого нужно запустить консоль от имени администратора.
c:\pgsql\bin\pg_ctl.exe register -N "PostgreSQL" -U postgres -D с:\pg_dataТеперь Панель управления->Администрирование->Службы. В списке появилась новая служба PostgreSQL. В ее свойствах, во вкладке "Вход в систему" нужно ввести правильный пароль пользователя postgres и нажать Применить. Все, теперь службу можно запустить.
Если предполагается подключение из локальной сети, то нужно изменить некоторые настройки. Во-первых надо открыть файл c:\pg_data\pg_hda.conf. В нем найти строку
host all all 127.0.0.1/32 trustи под ней добавить новую
host all all 192.168.1.1/24 trustв которой написано, что подключаться могут компьютеры локальной сети с адресами 192.168.1.х. Далее, в файле c:\pg_data\postgresql.conf нужно отредактировать параметры listen_addresses и port. Должно получится так
listen_addresses = '*'Все, после перезагрузки сервера к нему можно будет подключится из локальной сети.
port = 5432
Теперь самое интересное. Импорт старой базы. Если импорт производился правильно, т.е. так:
c:\pgsql\bin\pg_dump -Fc mydb > db.dumpто экспорт особого труда не составит. Нужно создать базу данных с названием mydb. Это можно сделать из pgadmin'а. Все, теперь можно импортировать.
c:\pgsql\bin\pg_restore -C -d mydb db.dumpВот и все.
воскресенье, 5 сентября 2010 г.
[upload][php]тонкости. Или то, о чем мало пишут.
как это делается описано во многих местах, например
http://www.phpclub.ru/detail/article/upload
но есть 3 момента, из-за которых будут проблемы.
1) не забыть в форму задать в виде
2) при создании каталога для хранения файлов нужно дать ему разрешение на все т.е.
Далее)
Как хранить ссылки на файлы, так чтоб их можно было скачать?
Это конечно интересный вопрос. Казалось бы, что может быть проще, записали в базу имя и вперед. Но, опять это дурацкое но)) Все я не пробовал проверять, но у меня возникают сомнения по поводу русских названий и пробелов. А если вспомнить кодировки и то, что хостинг обычно крутится на BSD или Linux, а большенство пользователей сидит на винде... Вобщем, универсальным решением я, для себя, выбрал перевод имен файлов в транслит. Вот такой замечательной функцией:
http://www.phpclub.ru/detail/article/upload
но есть 3 момента, из-за которых будут проблемы.
1) не забыть в форму задать в виде
важный момент выделен жирным.
2) при создании каталога для хранения файлов нужно дать ему разрешение на все т.е.
chmod 777 uploaddir3) существует заблуждение, что владельцем каталога должен быть пользователь, от имени которого работает apache или php. Нет! Владельцем каталога должен быть именно тот пользователь, который владеет скриптом.
Далее)
Как хранить ссылки на файлы, так чтоб их можно было скачать?
Это конечно интересный вопрос. Казалось бы, что может быть проще, записали в базу имя и вперед. Но, опять это дурацкое но)) Все я не пробовал проверять, но у меня возникают сомнения по поводу русских названий и пробелов. А если вспомнить кодировки и то, что хостинг обычно крутится на BSD или Linux, а большенство пользователей сидит на винде... Вобщем, универсальным решением я, для себя, выбрал перевод имен файлов в транслит. Вот такой замечательной функцией:
- <?php
- public function encodeS($st)
- {
- $st=strtr($st,"абвгдеёзийклмнопрстуфхъыэ_","abvgdeeziyklmnoprstufh'iei");
- $st=strtr($st,"АБВГДЕЁЗИЙКЛМНОПРСТУФХЪЫЭ_","ABVGDEEZIYKLMNOPRSTUFH'IEI");
- $st=strtr($st," ","_");
- // Затем - "многосимвольные".
- $st=strtr($st,
- array(
- "ж"=>"zh", "ц"=>"ts", "ч"=>"ch", "ш"=>"sh",
- "щ"=>"shch","ь"=>"", "ю"=>"yu", "я"=>"ya",
- "Ж"=>"ZH", "Ц"=>"TS", "Ч"=>"CH", "Ш"=>"SH",
- "Щ"=>"SHCH","Ь"=>"", "Ю"=>"YU", "Я"=>"YA",
- "ї"=>"i", "Ї"=>"Yi", "є"=>"ie", "Є"=>"Ye"
- )
- );
- // Возвращаем результат.
- return $st;
- }
- ?>
пятница, 12 февраля 2010 г.
xdmcp или какие могут быть проблемы при настройке kdm
С kdm ситуация немного проще чем с gdm.
Чтоб тоже самое сделать с помощью kdm надо отредактировать 2 файла, это /etc/kde4/kdm/kdmrc и /etc/kde4/kdm/Xaccess.
В kdmrc нужно найти [Xdmcp] заменить заменить в Enable=false на true, а в Xaccess раскоментировать
Чтоб тоже самое сделать с помощью kdm надо отредактировать 2 файла, это /etc/kde4/kdm/kdmrc и /etc/kde4/kdm/Xaccess.
В kdmrc нужно найти [Xdmcp] заменить заменить в Enable=false на true, а в Xaccess раскоментировать
#* #any host can get a login windowэту строку. Иначе, если ее не раскоментировать, возможно будет выдавать ошибку XDMCP fatal error: Manager unwilling Host unwilling.
xdmcp или какие могут быть проблемы при настройке gdm
Долго (дня 2) пытался нормально настроить gdm для xdmcp в ubuntu 9.10.
Дальше проблемы:
1. Как всегда в убунту нет конфига.
2. При втором заходе на сервер появляется ошибка XDMCP fatal error: session declined maximum number of open sessions from your host reached, если идти стандартным путем настройки, как написано на многочисленных сайтах.
Решения:
1. Файл custom.conf почти пустой лежит в /usr/share/doc/gdm/examples. Его надо скопировать в /etc/gdm/
Дальше проблемы:
1. Как всегда в убунту нет конфига.
2. При втором заходе на сервер появляется ошибка XDMCP fatal error: session declined maximum number of open sessions from your host reached, если идти стандартным путем настройки, как написано на многочисленных сайтах.
Решения:
1. Файл custom.conf почти пустой лежит в /usr/share/doc/gdm/examples. Его надо скопировать в /etc/gdm/
sudo cp /usr/share/doc/gdm/examples/custom.conf /etc/gdm/и, естественно вписать настройки
[xdmcp]2. Вторая проблемма как раз и решается последней строкой конфига, а именно DisplaysPerHost=2. При использовании gdm, она должна обязательно присутствовать, иначе после первого сеанса gdm перестанет пускать с ошибкой означеной выше.
Enable=true
MaxSessions=16
DisplaysPerHost=2
воскресенье, 24 января 2010 г.
Буква И в MySQL
Проблема в том, что MySQL как-то странно выводит эту букву в UTF-8. Все остальные нормально, а эта как попало( Выход из ситуации такой:
В классе подключения к БД, после mysql_connect, нужно написать mysql_query("SET NAMES UTF8");. Минус в том, что если база уже заполнена, ее придется перезаписать.
В классе подключения к БД, после mysql_connect, нужно написать mysql_query("SET NAMES UTF8");. Минус в том, что если база уже заполнена, ее придется перезаписать.
вторник, 19 января 2010 г.
utf8 и Денвер
Как заставить денвер работать внутри сети как корпоративный web-сервер, да так чтоб понимал utf8?
Надо C:\WebServers\usr\local\apache\conf\httpd.conf закоментить строку: AddDefaultCharset windows-1251 и ребутнуть денвер.
Все. Utf8 сервер уже научился.
Дальше надо, чтоб его было видно в локальной сети. Это описано в FAQ к денверу поэтому скажу, что мне понравился способ с .htaccess который надо положить в z:\home\_название сайта_\, и в котором надо написать #dnwr_ip _ваш ip адрес_, и стучаться на него с другого компа.
Надо C:\WebServers\usr\local\apache\conf\httpd.conf закоментить строку: AddDefaultCharset windows-1251 и ребутнуть денвер.
Все. Utf8 сервер уже научился.
Дальше надо, чтоб его было видно в локальной сети. Это описано в FAQ к денверу поэтому скажу, что мне понравился способ с .htaccess который надо положить в z:\home\_название сайта_\, и в котором надо написать #dnwr_ip _ваш ip адрес_, и стучаться на него с другого компа.
Подписаться на:
Сообщения (Atom)




