Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP]wybór pliku o największym rozmiarze spośród kilku
mirobor
post 30.05.2014, 19:07:20
Post #1





Grupa: Zarejestrowani
Postów: 85
Pomógł: 0
Dołączył: 1.02.2014

Ostrzeżenie: (0%)
-----


Gryzę się z takim o to problemem.
Potrzebuję zaimportować do nowego sklepu grafiki ze starego systemu. Stary sklep w zależności od działań obsługującego, zapisywał na serwerze od 1 do 6 plików o różnych rozmiarach i wadze dla danego produktu. Od najmniejszej miniatury do dużej grafiki galeryjnej.
Nazwy plików mają n/w przykładowe postaci dla produktu o id: 556654:
556654_sgnk34nkl3nn4ked.png
556654_ssfmlsfmlmr847ja.png
556654_35hknkfjkjsrjf34we.png
556654_689ghkhu9ukbjkbk.png

Do przeniesienia tych aktualnych użyłem:
  1. $files = glob($string . "*");
  2. if(count($files > 0))
  3. for ($i=0; $i<count($files); $i++)
  4. {
  5. $a = copy($files[$i], 'img_nowe/'.$files[$i]))
  6. }

gdzie $string to pobierany z bazy kod produktu.

Jak spośród od 1 do 6 plików zawierających określony string w nazwie, znaleźć i przenieść tylko ten 1 z nich który najwięcej waży?


Go to the top of the page
+Quote Post
Turson
post 30.05.2014, 19:16:08
Post #2





Grupa: Zarejestrowani
Postów: 4 291
Pomógł: 829
Dołączył: 14.02.2009
Skąd: łódź

Ostrzeżenie: (0%)
-----


  1. $naj['rozmiar'] = 0;
  2. $naj['plik'] = null;
  3. $files = glob($string . "*");
  4. if(count($files > 0))
  5. for ($i=0; $i<count($files); $i++)
  6. {
  7. $rozmiar = filesize($files[$i]);
  8. if($rozmiar>$naj['rozmiar'])
  9. $naj['plik'] = $files[$i];
  10. }
  11. // skopiuj plik z $naj['plik']
Go to the top of the page
+Quote Post
mirobor
post 30.05.2014, 20:08:07
Post #3





Grupa: Zarejestrowani
Postów: 85
Pomógł: 0
Dołączył: 1.02.2014

Ostrzeżenie: (0%)
-----


Dziękuje za odpowiedź ale niestety to nie działa i nie może działać skoro
  1. $naj['rozmiar']=0;

W pętli wyświetla wszystko co >0.
Jakiś ugrade, albo inne pomysły?

Ten post edytował mirobor 30.05.2014, 20:18:33
Go to the top of the page
+Quote Post
mar1aczi
post 30.05.2014, 20:26:47
Post #4





Grupa: Zarejestrowani
Postów: 731
Pomógł: 141
Dołączył: 9.05.2011
Skąd: śląskie

Ostrzeżenie: (0%)
-----


  1. $naj['plik'] = null;
  2. $files = glob($string . "*");
  3. if(count($files > 0)) {
  4. $naj['rozmiar'] = filesize($files[0]);
  5. for ($i=0; $i<count($files); $i++)
  6. {
  7. $rozmiar = filesize($files[$i]);
  8. if($rozmiar>$naj['rozmiar']) {
  9. $naj['rozmiar']=$rozmiar;
  10. $naj['plik'] = $files[$i];
  11. }
  12. }
  13. }
  14. // skopiuj plik z $naj['plik']


Edycja: poprawka za uwagą irmidjusz

Ten post edytował mar1aczi 30.05.2014, 20:35:35


--------------------
Szanuj innych czas! Kliknij , gdy pomocną wskazówkę otrzymasz.
Go to the top of the page
+Quote Post
irmidjusz
post 30.05.2014, 20:29:02
Post #5





Grupa: Zarejestrowani
Postów: 279
Pomógł: 60
Dołączył: 25.02.2012

Ostrzeżenie: (0%)
-----


mirobor, pomyśl chwilę, proszę. W pętli trzeba zapamiętywać rozmiar największego dotychczas znalezionego pliku, aby go porównywać z następną wartością.


--------------------
there is much to be learned
Go to the top of the page
+Quote Post
Turson
post 30.05.2014, 20:38:47
Post #6





Grupa: Zarejestrowani
Postów: 4 291
Pomógł: 829
Dołączył: 14.02.2009
Skąd: łódź

Ostrzeżenie: (0%)
-----


Też się poprawiam:
  1. $pliki = array();
  2. $files = glob($string . "*");
  3. if(count($files > 0))
  4. for ($i=0; $i<count($files); $i++)
  5. {
  6. $rozmiar = filesize($files[$i]);
  7. $pliki[$rozmiar] = $files[$i];
  8. }
  9. echo max($pliki);

Go to the top of the page
+Quote Post
mirobor
post 30.05.2014, 21:07:39
Post #7





Grupa: Zarejestrowani
Postów: 85
Pomógł: 0
Dołączył: 1.02.2014

Ostrzeżenie: (0%)
-----


@irmidjusz - siedzę i myślę, myślę i siedzę... i całkowicie nie wiem co mam wg Ciebie wymyśleć. Zupełnie szczerze -bez obrazy.

Na przykładzie z życia. Mam w przypadku
  1. $string = '0400000034058';

następujące pliki o wypisaniej wadze:

0400000034058_35254467249cb86fd2d3ac_40.png - 4 KB
0400000034058_66244925849cb86fb969f6_200.png - 51 KB
0400000034058_97965927449cb86fc9171f_100.png - 16 KB
0400000034058_213095399849cb86f622116_100.png - 16 KB
0400000034058_213095399849cb86f622116_600.png - 400 KB

Ostatni kod @Turson
  1. $string = '0400000034058';
  2. $pliki = array();
  3. $files = glob($string . "*");
  4. if(count($files > 0))
  5. for ($i=0; $i<count($files); $i++)
  6. {
  7. $rozmiar = filesize($files[$i]);
  8. $pliki[$rozmiar] = $files[$i];
  9. }
  10. echo max($pliki)


wyświetla: 0400000034058_66244925849cb86fb969f6_200.png.png

Jeżeli faktycznie powinienem głębiej pomyśleć proszę o kopa w dobrym kierunku.

Ten post edytował mirobor 30.05.2014, 21:14:15
Go to the top of the page
+Quote Post
Turson
post 30.05.2014, 21:19:28
Post #8





Grupa: Zarejestrowani
Postów: 4 291
Pomógł: 829
Dołączył: 14.02.2009
Skąd: łódź

Ostrzeżenie: (0%)
-----


Co zwraca?
  1. $string = '0400000034058';
  2. $pliki = array();
  3. $files = glob($string . "*");
  4. if(count($files > 0))
  5. for ($i=0; $i<count($files); $i++)
  6. {
  7. $rozmiar = filesize($files[$i]);
  8. $pliki[$rozmiar] = $files[$i];
  9. echo $files[$i].' waży '.$rozmiar.'<br>';
  10. }
  11. echo '<pre>';
  12. print_r($files);
  13. echo '</pre>';
  14. echo max($pliki)
Go to the top of the page
+Quote Post
mirobor
post 30.05.2014, 21:33:04
Post #9





Grupa: Zarejestrowani
Postów: 85
Pomógł: 0
Dołączył: 1.02.2014

Ostrzeżenie: (0%)
-----


img_my/img_all/0400000034058_12739942049cb88549cee0_100.png waży 15765
img_my/img_all/0400000034058_139746570749cb885537f9b_40.png waży 3181
img_my/img_all/0400000034058_173261301849cb884e27f29_100.png waży 15765
img_my/img_all/0400000034058_173261301849cb884e27f29_600.png waży 411740
img_my/img_all/0400000034058_191095430049cb8853a234a_200.png waży 52123

  1. (
  2. [0] => img_my/img_all/0400000034058_12739942049cb88549cee0_100.png
  3. [1] => img_my/img_all/0400000034058_139746570749cb885537f9b_40.png
  4. [2] => img_my/img_all/0400000034058_173261301849cb884e27f29_100.png
  5. [3] => img_my/img_all/0400000034058_173261301849cb884e27f29_600.png
  6. [4] => img_my/img_all/0400000034058_191095430049cb8853a234a_200.png
  7. )


img_my/img_all/0400000034058_191095430049cb8853a234a_200.png
Go to the top of the page
+Quote Post
Turson
post 30.05.2014, 21:41:53
Post #10





Grupa: Zarejestrowani
Postów: 4 291
Pomógł: 829
Dołączył: 14.02.2009
Skąd: łódź

Ostrzeżenie: (0%)
-----


Rozkminiam o co chodzi, a trzeba wyprintować $pliki a nie $files smile.gif
Go to the top of the page
+Quote Post
mirobor
post 30.05.2014, 21:49:27
Post #11





Grupa: Zarejestrowani
Postów: 85
Pomógł: 0
Dołączył: 1.02.2014

Ostrzeżenie: (0%)
-----


Bardzo muczios very gracias. Ja w tym czasie przeglądam Twojego bloga i skrypty. Very interesting wink.gif
Go to the top of the page
+Quote Post
Turson
post 30.05.2014, 21:52:11
Post #12





Grupa: Zarejestrowani
Postów: 4 291
Pomógł: 829
Dołączył: 14.02.2009
Skąd: łódź

Ostrzeżenie: (0%)
-----


Nagle działa? print_r nie miał nic wspólnego z poprawnym działaniem
Go to the top of the page
+Quote Post
mirobor
post 30.05.2014, 22:10:24
Post #13





Grupa: Zarejestrowani
Postów: 85
Pomógł: 0
Dołączył: 1.02.2014

Ostrzeżenie: (0%)
-----


Wydaje się, że ten wyedytowany przez @mar1aczi pod wpływem: Edycja: poprawka za uwagą irmidjusz działa.
  1. $naj['plik'] = null;
  2. $files = glob($string . "*");
  3. if(count($files > 0)) {
  4. $naj['rozmiar'] = filesize($files[0]);
  5. for ($i=0; $i<count($files); $i++)
  6. {
  7. $rozmiar = filesize($files[$i]);
  8. if($rozmiar>$naj['rozmiar']) {
  9. $naj['rozmiar']=$rozmiar;
  10. $naj['plik'] = $files[$i];
  11. }
  12. }
  13. }
  14. // skopiuj plik z $naj['plik']

Testuję...

Działa idealnie. Bardzo Wam dziękuję. Przeanalizuję kod, zapamiętam i to już kolejna moja nauka dzięki Wam i forum.php.pl
Thank you very much SIRS.
Go to the top of the page
+Quote Post
mar1aczi
post 31.05.2014, 10:52:25
Post #14





Grupa: Zarejestrowani
Postów: 731
Pomógł: 141
Dołączył: 9.05.2011
Skąd: śląskie

Ostrzeżenie: (0%)
-----


Cytat(mirobor @ 30.05.2014, 23:10:24 ) *
Przeanalizuję kod, zapamiętam ...

Nie ucz się kodu na pamięć! Większe "owoce wyda" jego dogłębne zrozumienie linijka po linijce co się dzieje i dlaczego, tzn. prawidłowe układanie/rozumowanie algorytmów. To przełoży Ci się na umiejętność pisania kodu dla nowych wyzwań.


--------------------
Szanuj innych czas! Kliknij , gdy pomocną wskazówkę otrzymasz.
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 19.04.2024 - 21:57