Freesco, NND, CDN, EOS

http://www.freesco.pl
Dzisiaj jest czwartek, 28 marca 2024, 11:01

Strefa czasowa UTC+2godz.




Nowy temat Odpowiedz w temacie  [ Posty: 14 ] 
Autor Wiadomość
Post: wtorek, 19 maja 2009, 16:16 
Offline

Rejestracja: niedziela, 25 stycznia 2009, 04:30
Posty: 21
Lokalizacja: Mińsk- Mazowiecki
Witam,

Jak wiadomo Php nie pozwala na praca na plikach które w nazwie mają spację i inne niezbyt Posixowe znaki.


A ja poszukuje skryptu który pozwolił by na masowe przeszukiwanie danego katalogu wraz z podkatalogami i zmieniał nazwy plików które mają spacje zastępując ją np "-" twardą spacją

np : 'ala ma kota.mp3' na: 'ala_ma_kota.mp3'

Z tego co wyczytałem mamy do dyspozycji 'aplikację' tr która pozwala na zmiane nazw, ' ' - definicja spacji, a pewnie dodając do tego 'mv' coś by z wyszło :) następnie do crona i działa. Ale to tylko teoria, której ja nie umiem zastosować.

Dodam że katalog główny jest stały ale podkatalogi wciąż są w ruchu więc pozostaje aby przeszukiwał, a zdefiniowanie konkretnie podkatalogów nie wchodzi w gre.Występują również sytuacje gdzie katalog ma w nazwie 'spacje' a w nim są pliki które mają 'spacje' i to wszystko powinien owy skrypt pozmieniać.

W sieci znalazłem coś takiego http://leksykot.top.hell.pl/tech/chnam

ale link pobierania nie działa :(

idąc tropem nazwy skryptu "change_name" znalazłem http://forum.python.org.pl/index.php?topic=430.5;wap2

gdzie jest podany skrypt :

: [/] [] ()
os.path.walk(u'..path..', change_name, 0)
..
W miejsce '..path..' mozna wstawic np. '.' lub '/home/user/mp3'.

Kod
#-*- coding: utf-8 -*-
import os, unicodedata, re
 
def change_name(arg, dir, files):
for file in files:
root_path = os.path.join(dir, file)
if re.search(r".*\.mp3", root_path):
new_path = unicodedata.normalize('NFKD', root_path).encode('utf-8','ignore').replace('ł','l')
#os.rename(path, new_path)
print new_path
path = unicode(new_path, 'utf-8')
new_path = unicodedata.normalize('NFKD', path).encode('ascii','ignore').replace(' ', '_').lower()
print new_path
os.rename(root_path, new_path)
os.path.walk(u'.', change_name, 0)
Teraz można umieścić skrypt w folderze z plikami mp3 i odpalić go.


Ale to też nie do końca to.


Somebody Help Me ?

_________________
dev/null


Na górę
 Wyświetl profil  
 
Post: wtorek, 19 maja 2009, 18:36 
Offline
Użytkownik

Rejestracja: środa, 23 stycznia 2008, 17:32
Posty: 691
Lokalizacja: Pabianice
jarosja pisze:
Witam,
Jak wiadomo Php nie pozwala na praca na plikach które w nazwie mają spację i inne niezbyt Posixowe znaki.

A kto Ci tak powiedzial ?
Mozna zapisywac i czytac nazwy plikow, ktore maja w nazwie spacje czy
inne znaki na, ktore pozwoli system operacyjny tylko nie bardzo sobie
radzi serwer z takimi nazwami i zwykle np do linkow dodaje %20.
Roznica taka w nazwie spowoduje np to ze sie nie pokaze obrazek, albo
odnosnik nie trafi do celu.

jarosja pisze:
A ja poszukuje skryptu który pozwolił by na masowe przeszukiwanie danego katalogu wraz z podkatalogami i zmieniał nazwy plików które mają spacje zastępując ją np "-" twardą spacją

Z daleszej jednak czesci postu wynika ze chcesz to zrobic pod linuxem.


Na górę
 Wyświetl profil  
 
 Tytuł:
Post: środa, 20 maja 2009, 16:49 
Offline
PGF

Rejestracja: piątek, 25 lutego 2005, 18:22
Posty: 1430
Lokalizacja: Elbląg
http://viater.one.pl/pub/test.html
Zajrzyj w źródło tej strony i zobacz nazwę pliku, do którego prowadzi umieszczony tam L I N K
Serwer oczywiście jak najbardziej linuxowy.
Wprawdzie nie jest to w PHP, ale IMHO nie powinno być różnicy...
Napisz konkretnie jakie operacje na plikach chcessz robić w tym PHP.

_________________
F33/F07,F11,F13,F17
ObrazekObrazek


Na górę
 Wyświetl profil  
 
 Tytuł:
Post: czwartek, 21 maja 2009, 11:10 
Offline

Rejestracja: niedziela, 25 stycznia 2009, 04:30
Posty: 21
Lokalizacja: Mińsk- Mazowiecki
Ok. to postaram się to lepiej wytłumaczyć.

Mam serwer NND na który wpadają fizycznie pliki......a następnie user X pobiera je z niego przez www za pomocą explorera zbudowanego na PHP. Więc problem jest taki że operacje na tych plikach serwer może wykonywać np przez SSh, Ftp itd...ale w żaden sposób nie można zmusić skryptu PHP "jakikolwiek explorator" aby dało się na nich wykonywać takie operacje jak pobierz, spakój, zmieńnazwe przez WWW. Mówie tylko o plikach z spacją w nazwie.

Mam wrażenie, że mylnie interpretuje on np :

test test.test - interpretuje jako dwa pliki jeden to test a drugi test.test
tak samo jak konsola sie zachowuje w takim przypadku jeśli nie zapiszemy tego tak 'test test.test' - apostrof

Dlatego chciał bym skrypt który zamienia pliki z spacjami na nap test_test.test

_________________
dev/null


Na górę
 Wyświetl profil  
 
 Tytuł:
Post: czwartek, 21 maja 2009, 12:51 
Offline
PGF

Rejestracja: piątek, 25 lutego 2005, 18:22
Posty: 1430
Lokalizacja: Elbląg
Dalej nie kumam...
Operacje na plikach sa robione pzez php ?
jesli tak to pokaz kawalek kodu....

_________________
F33/F07,F11,F13,F17
ObrazekObrazek


Na górę
 Wyświetl profil  
 
 Tytuł:
Post: czwartek, 21 maja 2009, 14:35 
Offline
Użytkownik

Rejestracja: środa, 23 stycznia 2008, 17:32
Posty: 691
Lokalizacja: Pabianice
Ja kumam.
Chodzi o to, ze jesli jest podany link do pliku ze spacja, a przegladarka
zamienia te nazwe dodajac %20 to trafia on nigdzie ...
Przyklad :
http://www.bluelan.pl/przyklad tematu.txt
a plik tak na prawde istnieje pod ta lokacja jednak
pokazuje sie blad. Poza tym na tym forum jak sam to zauwazysz na pewno
link jest przestawiany nie prawidlowo ze spacja.
Ktos kto w to kliknie bedzie chcial trafic do :
http://www.bluelan.pl/przyklad
a nie do http://www.bluelan.pl/przyklad tematu.txt .
To jest oczywiscie tylko kwestia nieznacznej zmiany sposobu zapisu w
poscie :
: [/] [] ()
<a href='http://www.bluelan.pl/przyklad tematu.txt'>http://www.bluelan.pl/przyklad tematu.txt</a>

i juz link trafia tam gdzie trzeba.
Ale pewnie idzie o to zeby zmienic nazwe plikow i jednoczesnie
pozbywajac sie tego problemu na stronach gdzie sa podawane linki.
Ciekawi mnie tylko jedno. Dlaczego odrazu w skrypcie gdzie sa dodawane
pliki nie bylo jakiegos zabezpieczenia np zmiany nazwy pliku w takich
wypadkach chyba, ze pliki dodawano osobno np poprzez ftp, a teraz
sa czytane jedynie przy pomocy php ich nazwy i umieszczane w
formie linkow na stronie .
Niektore serwery tak reaguja, ze zamiast pokazania sie poprawnej
odpowiedzi serwera i rozpoczecie transmisji pokazuje sie blad, ze taka
strona nie istnieje.

Chodzi o to, ze kolega chce chyba zamienic nazwy plikow na dysku i w
bazie.


Na górę
 Wyświetl profil  
 
 Tytuł:
Post: czwartek, 21 maja 2009, 22:18 
Offline
PGF

Rejestracja: piątek, 25 lutego 2005, 18:22
Posty: 1430
Lokalizacja: Elbląg
Qmam teraz (chyba). Najprościej zrobiłbym to tak: w bazie i w systemie plików, czy gdzie tam jaszcze, trzymasz nazwy plików normalnie ze spacjami. W samym skrypcie PHP - po wyciągnięciu z bazy nazwy pliku - dopisujesz jedną linijkę kodu, w której zamieniasz każdą spację na ciąg %20 - i po problemie, bo skrypt wygeneruje link w postaci
: [/] [] ()
<a href="http://aaa.bbb.ccc/dupa%20jasiu%20pierdzi%20stasiu.txt">
i każda szanująca się przeglądarka, jak i serwer powinny się dogadać tak, jak byś sobie tego życzył.

_________________
F33/F07,F11,F13,F17
ObrazekObrazek


Na górę
 Wyświetl profil  
 
 Tytuł:
Post: czwartek, 28 maja 2009, 13:38 
Offline

Rejestracja: niedziela, 25 stycznia 2009, 04:30
Posty: 21
Lokalizacja: Mińsk- Mazowiecki
Ok Panowie dziękuje za zainteresowanie. Oto dokładnie chodzi. "Viater" na pewno ten skrypt
: [/] [] ()
<a href="http://aaa.bbb.ccc/dupa%20jasiu%20pierdzi%20stasiu.txt">
dał by radę, ale cała aplikacja webowa jest dość skomplikowana. Chodzi konkretnie o http://www.awssoft.com/products.php?p=filemanager&s=overview
Ona wyświetla te katalogi w fleshu, ma elementy z Ajaxa a pracuje na plikach przy pomocy PHP. Więc kwestia dodania tej linijki nie jest taka prosta jak się wydaje...<lol>. Wiem, że się zapytacie (po co to ?) ja odrazu odpowiem -ponieważ mam grupę userów która ma możliwość korzystania tylko z portu 80-, tego :) a aplikacja jest prawie jak windows <lol> . Więc wracając do tematu nadal myślę że najłatwiej było by po prostu fizycznie zmieniać nazwy plików w danym katalogu.

Znalazłem cos takiego na necie ale jak to zaadoptować do moich potrzeb :

: [/] [] ()
find może pomóc w usunięciu lub przemianowaniu pliku o dziwnych znakach w nazwie. Czasem zawadzają ludziom pliki mające w nazwie znaki takie jak spacje, tabulacje, znaki sterujące czy znaki z ustawionym ósmym bitem [tłum.: np. polskie litery]. Najprostszą metodą usunięcia takich plików jest:

rm -i jakiś*wzorzec*pasujący*do*kłopotwliwego*pliku

Dla każdego pliku pasującego do podanego wzorca rm pyta o potwierdzenie usunięcia. Jeżeli używa się jakiejś starej powłoki, takie podejście może nie działać jeśli nazwa pliku zawiera znak z ustawionym ósmym bitem -- powłoka może go obcinać. Bardziej niezawodną metodą jest:

find . -maxdepth 1 testy -ok rm '{}' \;

gdzie testy w sposób jednoznaczny identyfikują plik. Opcja `-maxdepth 1' dla find zapobiega marnowaniu czasu na szukanie pliku w podkatalogach. Jeśli nie ma podkatalogów, można ją pominąć. Dobrym sposobem jednoznacznej identyfikacji kłopotliwego pliku jest znalezienie jego numeru i-węzła; wystarczy użyć

ls -i

Załóżmy, że mamy plik, którego nazwa zawiera znaki sterujące, i dowiedzieliśmy się, że jego numer i-węzła to 12345. To polecenie prosi o potwierdzenie jego usunięcia:

find . -maxdepth 1 -inum 12345 -ok rm -f '{}' \;

Czasem nie chcemy być pytani, na przykład dlatego, że nazwa pliku zawiera dziwną sekwencję znaków, która wypisana, zamieszała by na ekranie. Należy wówczas zamiast `-ok' użyć `-exec'.

Jeżeli zamiast tego chcemy zmienić nazwę pliku, wystarczy użyć mv zamiast rm:

find . -maxdepth 1 -inum 12345 -ok mv '{}' nowa-nazwa-pliku \;

_________________
dev/null


Na górę
 Wyświetl profil  
 
 Tytuł:
Post: czwartek, 28 maja 2009, 18:22 
Offline
Użytkownik

Rejestracja: środa, 23 stycznia 2008, 17:32
Posty: 691
Lokalizacja: Pabianice
No dobra, ale pliki chyba nie tylko sa zapisane na dysku
serwera, ale tez i w bazie danych ? Chyba, ze sie myle.
Cos takiego mozna napisac w php i nie koniecznie w linux.
Nie wiem czemu sie uparles na linux :D
Mozna zmieniac pliki grupowo, strona moze sie odswierzac
automatycznie i jak zapuscisz ja wieczorem to rano jak wstaniesz
bedzie juz po bolu.


Na górę
 Wyświetl profil  
 
 Tytuł:
Post: czwartek, 28 maja 2009, 20:56 
Offline

Rejestracja: niedziela, 25 stycznia 2009, 04:30
Posty: 21
Lokalizacja: Mińsk- Mazowiecki
W tym wypadku w bazie danych nie ma żadnych wpisów co do plików jakie się tam znajdują. Po prostu skrypt PHP ma podany katalog z którego ma korzystać i to co tam jest na tym on operuje. A baza danych służy tylko dla ustawień i logowań userów.
Są dwa powody dla których uparłem się na to aby to linux robił

1. Nie znam się zbytnio na PHP ale czy kiedyś eksperymentowałeś z np :
: [/] [] ()
rename


powiedzmy, że mamy taki skrypt :

: [/] [] ()
<?php
rename("/katalog/stara_nazwa.txt", "/katalog/nowa_nazwa.txt");
?>


To się napewno uda

a jeśli wydał bym polecenie zawierające taki plik:

: [/] [] ()
rename("/katalog/stara nazwa z spacja.txt", "/katalog/nowa_nazwa.txt");


To już jest problematyczne.......

a jeśli dodatkowo ta nazwa to:

: [/] [] ()
rename("/katalog/stara nazwa z spacja new"s new's.txt", "/katalog/nowa_nazwa.txt");


a takie się często zdarzają...

2. W grę wchodzi uruchamianie skryptu codziennie a średnia waga katalogu to ~150GB.......mój serwerek to raptem 866MHZ PIII i raptem 1,5 GB ram w ECC. Dodatkowo jet na nim ~ok 65 procesów 24/h

Z doświadczenia wiem, że praca na plikach za pomocą PHP jest o wiele wolniejsza.

Oczywiście mogę się mylić ale jak bym wiedział wszystko to by mnie "tu" nie było :D i chętnie wypróbuję taki skrypt w PHPie

_________________
dev/null


Na górę
 Wyświetl profil  
 
 Tytuł:
Post: piątek, 29 maja 2009, 00:31 
Offline
Użytkownik

Rejestracja: wtorek, 3 marca 2009, 03:48
Posty: 128
Jeśli chodzi o problem cudzysłowów w nazwie spróbuj zrobić to w ten sposób.
: [/] [] ()
rename("/katalog/stara nazwa z spacja new\"s new's.txt", "/katalog/nowa_nazwa.txt");

A co do spacji to jesteś pewien, że php sobie z tym nie poradzi ? W sensie bardziej czy sprawdzałeś bo moim zdaniem php bez problemu daje sobie radę ze spacjami (ale to trzeba przetestować bo na 100% pewny nie jestem).


Na górę
 Wyświetl profil  
 
 Tytuł:
Post: piątek, 29 maja 2009, 00:52 
Offline
Użytkownik

Rejestracja: środa, 23 stycznia 2008, 17:32
Posty: 691
Lokalizacja: Pabianice
Idac dalej Masz tu skrypt, ktory sobie przed chwila napisalem
i sprawdzilem czy dziala :
: [/] [] ()
<?
$folder = 'obrazki';
      if ($handle = opendir($folder)) {
         while ( false !== ( $file = readdir($handle) ) ) {
             if ($file != "." && $file != ".." && $file != "index.php") {
                # rename($nazwaprzed, $nazwapo);
               echo "$file<br>\n";
               $img[] = $file;
             }
         }
         closedir($handle);
      }
?>


Do zmiennej $folder podajesz nazwe foldera, ktory ma byc czytany.
Pozniej czytane sa wszystkie nazwy plikow w tym folderze i jest budowana
tablica nazw $img w petli while. Mozesz oczywiscie juz pozniej z tym zrobic
co chcesz. Probowalem nawet zmieniac nazwe dodolnego pliku i nie ma
z tym zadnego problemu.
Oczywiscie jesli plikow jest zbyt wiele mozesz podzielic zmiane nazw na
pewne etapy np po 500 plikow, a nastepnie odswierzyc strone i znowu
odczytac powiedzmy 500 plikow , itd ...
Po drodze mozesz jeszcze wykonac dowolna operacje na nazwach.
Np wywalic spacje, dodac zamiast spacji "_", albo co tam Ci sie zamazy.
W kazdym razie uwazam, ze mozna to zalatwic dosc prosto przy pomocy
wlasnie php. W skrypcie sa pomijane nazwy pliku index.php oraz
drzewo katalogow ".", ".."


Na górę
 Wyświetl profil  
 
 Tytuł:
Post: niedziela, 14 czerwca 2009, 13:14 
Offline

Rejestracja: niedziela, 25 stycznia 2009, 04:30
Posty: 21
Lokalizacja: Mińsk- Mazowiecki
OK spoko dzięki za skrypt - działa

mam też taki skrypt
: [/] [] ()
 <?php 
 header('Content-type: text/html; charset=utf-8'); 
 define('DIRECTORY','./'); 
 $polish = array('ą','Ą','ę','Ę','ś','Ś','ć','Ć','ź','Ź','ż','Ż','ł','Ł','ó','Ó','ń','Ń',' '); 
 $replace_polish = array('a','A','e','E','s','S','c','C','z','Z','z','Z','l','L','o','O','n','N','_'); 
 $DirIterator = new RecursiveIteratorIterator(new RecursiveDirectoryIterator(DIRECTORY)); 
 foreach ($DirIterator as $File) { 
 $file_array = array(); 
 $changed_file_name = ''; 
 $file_array = explode('.',$File->getFileName()); 
 $file_array[0] = str_replace($polish,$replace_polish,$file_array[0]); 
 $changed_file_name = join('.', $file_array); 
 echo $File->getPathname().' '.$File->getPath().'/'.$changed_file_name.'<br />'; 
 rename ($File->getPathname(),$File->getPath().'/'.$changed_file_name); 
  } 
  ?> 
i też działa :)


Ale co mi po tych skryptach skoro katalogi pozostają z niezmienioną nazwą ?

mam katalogi z np: spacją w nazwie a w nim już pozmieniane pliki bez spacji a do katalogu dostać się nie mogę bo ma złą nazwę...............

_________________
dev/null


Na górę
 Wyświetl profil  
 
 Tytuł:
Post: niedziela, 14 czerwca 2009, 20:34 
Offline
Użytkownik

Rejestracja: środa, 23 stycznia 2008, 17:32
Posty: 691
Lokalizacja: Pabianice
Tamten skrypt to byl tylko przyklad ...
Mozesz na jego podstawie zrobic zmiane nazw folderow.
Jesli faktycznie jakis boleje to mozesz przeciez recznie
zmienic nazwe i mysle, ze to beda pojedyncze sztuki.


Na górę
 Wyświetl profil  
 
Wyświetl posty nie starsze niż:  Sortuj wg  
Nowy temat Odpowiedz w temacie  [ Posty: 14 ] 

Strefa czasowa UTC+2godz.


Kto jest online

Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 9 gości


Nie możesz tworzyć nowych tematów
Nie możesz odpowiadać w tematach
Nie możesz zmieniać swoich postów
Nie możesz usuwać swoich postów
Nie możesz dodawać załączników

Szukaj:
Przejdź do:  
cron
Technologię dostarcza phpBB® Forum Software © phpBB Group
Hosting: Compus-Net
RobertKonik.pl