Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Losowy obrazek z katalogu udostępnia się na facebook
Forum PHP.pl > Forum > PHP
poprawka
Witam serdecznie wszystkich

Mam jeden problem związany z dopisaniem jednej funkcji do aplikacji na facebook, chodzi mianowicie o to iż w tym momencie mogę dodać na dany obrazek
Dane linijki z plików tekstowych. ( w kodzie niżej jest to linijka 30 imagecreatefromjpeg ("foto.jpg"); )

Niestety nie potrafię tego tak zmodyfikować aby można było dodać zamiast właśnie tego obrazka foto.jpg
losowego zdjęcia z danego folderu na serwerze.

Szukałem i znalazłem odpowiedzi jak zrobić aby dodawał się losowy obrazek lecz nie potrafię jeszcze tego w pełni zaimplementować do kodu.

Zacząłem moją przygodę z PHP niecały miesiąc temu kożstam z książki Heliona od podstaw i jeszcze nie doszedłem do takich rzeczy.

Ale do rzeczy mam już kod gdzie dodaje obrazek foto.jpg i nanoszę na niego w odpowiednich miejscach tany tekst:

  1.  
  2. <?php
  3. putenv('GDFONTPATH=' . realpath('.'));
  4. require_once 'src/facebook.php'; // EDIT
  5. $app_id = "...";
  6. $app_secret = "...";
  7. $redirect_uri ="...";
  8. $facebook = new Facebook(array(
  9. 'appId' => $app_id,
  10. 'secret' => $app_secret,
  11. 'cookie' => true
  12. ));
  13. $user = $facebook->getUser();
  14. $user_profile = $facebook->api('/me');
  15.  
  16. $coded = $_REQUEST['code'];
  17.  
  18. $name = "".$user_profile['name']."";
  19. $birth = "".$user_profile['birthday']."";
  20. $fbid = "".$user_profile['id']."";
  21.  
  22. function RandomLine($filename) {
  23. $lines = file($filename) ;
  24. return $lines[array_rand($lines)] ;
  25. }
  26. $reason1 = RandomLine("reason1.txt");
  27. $reason2 = RandomLine("reason2.txt");
  28.  
  29. $obrazek = imagecreatefromjpeg ("foto.jpg");
  30.  
  31.  
  32.  
  33. $color = imagecolorallocate( $obrazek, 0, 0, 0 ); //kolro nazwiska
  34. $color1 = imagecolorallocate( $obrazek, 36, 0, 255 ); //kolor pierwszej linijki na obrazku
  35. $color2 = imagecolorallocate( $obrazek, 36, 0, 255 ); // kolor drugiej
  36.  
  37. $font1 = "HelveticaNeueLTPro-BdEx.ttf";
  38. $font = "HelveticaNeueLTPro-BlkExO.ttf";
  39. //$death = "".date('d/m/Y', strtotime( '+'.rand(0, 2023).' days'))."";
  40.  
  41. imagettftext( $obrazek, 48, 0, 9, 50, $color, $font, $name ); // pozycja pierwszej linijki
  42. //imagettftext( $obrazek, 14, 0, 100, 115, $black, $font, $death ); losowa data
  43. imagettftext( $obrazek, 36, 0, 57, 230, $color1, $font1, $reason1 ); // pozycja drugiej linijki
  44. imagettftext( $obrazek, 36, 0, 1, 330, $color2, $font1, $reason2 ); // pozycja trzeciej linijki
  45.  
  46.  
  47. imagejpeg($obrazek, "img/".$fbid.".jpg", 100);
  48.  
  49. $facebook->setFileUploadSupport(true);
  50.  
  51. //Create an album
  52. $album_details = array(
  53. 'message'=> 'ZOBACZ mijesce i pozycję miłosną na dziś',
  54. 'name'=> 'bo zawsze jest czas na...'
  55. );
  56. $create_album = $facebook->api('/me/albums', 'post', $album_details);
  57.  
  58. //Get album ID of the album you've just created
  59. $album_uid = $create_album['id'];
  60.  
  61. //Upload a photo to album of ID...
  62.  
  63. $file='img/'.$fbid.'.jpg'; //Example image file
  64.  
  65. $photo_details = array( 'message'=> '...', 'image' => '@' . realpath($file) );
  66. $upload_photo = $facebook->api('/'.$album_uid.'/photos', 'post', $photo_details);
  67. imagedestroy($obrazek);
  68. $upphoto = $upload_photo['id'];
  69. header("location: <a href="http://www.facebook.com&quot%3b%29" target="_blank">http://www.facebook.com")</a>
  70. ?>


No dobrze tak jak napisałem szukałem w sieci rozwiązania i znalazłem kilka sposobów, może je przedstawię.
Pierwszy sposób:


  1. <?php
  2. $folder = opendir(obrazki);
  3. $i = 0;
  4. while(false !=($plik = readdir($folder))){
  5. if($plik != "." && $plik != ".."){
  6. $obrazki[$i]= $plik;
  7. $i++;
  8. }
  9. }
  10. closedir($folder);
  11. $losowy=rand(0,count($obrazki)-1);
  12. echo '<img src="obrazki/'.$obrazki[$losowy].'" alt="" />';
  13. ?>


Najpierw za pomocą funkcji opendir() należy otworzyć folder
Funkcja readdir() zwraca nazwy kolejnych plików w danym katalogu
Za pomocą funkcji closedir() zamykamy połączenie z wcześniej otworzonym katalogiem.
Funkcja rand(), zwraca losową liczbę z podanego w parametrach przedziału. Natomiast funkcja count() przekazuje liczbę elementów tablicy.

Ok próbowałem na wiele sposobów użyć tego rozwiązania lecz nie udawało mi się to w pełni.

Drugi spoób na któy się natknąłem w sieci to za pomocą funkcji include() dodać plik:

Kod pliku do losowego wybierania obrazków:
  1. <?php
  2. $katalog = '/dziewczyny/obrazki/';
  3. $n=0;
  4.  
  5. if(@$d = opendir($katalog)){
  6. while (!(($plik = readdir($d)) === false)) {
  7. if(stristr($plik, '.jpg') or stristr($plik, '.jpeg') or stristr($plik, '.gif') or stristr($plik, '.bmp') or stristr($plik, '.png')){
  8. $n++;
  9. $losowy_obr[$n] = "$plik";
  10. }
  11. }
  12. closedir($d);
  13. if(!empty($losowy_obr)) {
  14. $losowa_poz = array_rand($losowy_obr);
  15. echo "<table align='center'><tr><td><img src=\"$katalog/$losowy_obr[$losowa_poz]\"></td></tr></table>";
  16. }
  17. else echo 'Przykro nam zdjęcia uciekły';
  18. }
  19. else echo 'no to mam błąd i nie wiem co robić;P';
  20. ?>



Lecz nie wiedziałem także dokładnie gdzie wstawić funkcję include z tym plikiem, również próbowałem na wiele sposobów.


Bardzo proszę osoby które znają rozwiązanie tego problemu o pomoc, ponieważ nie mogę sam sobie poradzić. Wczoraj siedziłem do późnej nocy lecz mi się to nie udało.

Z góry dziękuję wszystkim za jakąkolwiek pomoc.
MGraphics
Witam,

Na twoim miejscu przeanalizowałbym sobie ten pierwszy sposób używając funkcji glob
  1. <?php
  2. $obrazki = glob("*");
  3. foreach ($obrazki as $filename) {
  4. }
  5.  
  6.  
  7. $losowy=rand(0,count($obrazki));
  8. echo $losowy;
  9. ?>

A jeszcze przed tym zobacz sobie czy ta twoje zmienna
  1. $obrazki
przechowuje jakieś dane.
poprawka
Dziękuję za odpowiedź.

Tak więc skorzystałem z Twojej sugestii lecz niestety tak jak pisałem wcześniej nie jestem super programistą jestem początkujący i nie potrafie rozwiązać tego problemu.

Próbowałem tak (nie będę znowu całego kodu przeklejał tylko odpowiednie linijki

  1. $reason1 = RandomLine("reason1.txt");
  2. $reason2 = RandomLine("reason2.txt");
  3.  
  4.  
  5. $obrazki = "/obrazki";
  6.  
  7.  
  8.  
  9. $folder = opendir(obrazki);
  10. $i = 0;
  11. while(false !=($plik = readdir($folder))){
  12. if($plik != "." && $plik != ".."){
  13. $obrazki[$i]= $plik;
  14. $i++;
  15. }
  16. }
  17. closedir($folder);
  18. $losowy=rand(0,count($obrazki)-1);
  19. echo '<img src="obrazki/'.$obrazki[$losowy].'" alt="" />';
  20.  
  21.  
  22.  
  23. $obrazki = glob("*");
  24. foreach ($obrazki as $filename) {
  25. }
  26.  
  27. $losowy=rand(0,count($obrazki));
  28. echo $losowy;
  29.  
  30. //$color = imagecolorallocate( $obrazki, 0, 0, 0 ); //kolro nazwiska
  31. //$color1 = imagecolorallocate( $obrazki, 36, 0, 255 ); //kolor pierwszej linijki na obrazku
  32. //$color2 = imagecolorallocate( $obrazki, 36, 0, 255 ); // kolor drugiej


Jak widać dodałem zmienną :
$obrazki = "/obrazki";

A usunąłem foto.jpg ( z pierwszego mojego postu)

Ale nadal źle to działa ( na pewno robię to źle). Czy mógłbyś mi pomóc wkleić to w odpowiednie miejsce. Byłbym niezmiernie wdzięczny.



Czy ktoś potrafi rozwiązać mój problem?

Bardzo proszę o pomoc.

No i nikt?

Za pomoc która okaże działającą stawiam flache

kolejny edit. W celu przesunięcia tematu wyzej.

Jednak proszę raz jeszcze o pomoc.

?

edit

Jeśli ktoś potrafi rozwiązać problem prosze o kontakt na 8155549
Zapłacę za pomoc.

ktoś?

?
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.