Beragadt a szavazógép

Ilusha képe

Kiírtam egy szavazást a honlapon, ami működött is, egészen addig, míg valaki nem szavazott.
Amint szavazott, bekerült a voksa, de onnantól kezdve már nem lehetett többet szavazni, csak az eredmények voltak láthatóak, nem csak neki, hanem mindenki másnak.

De nem tudom hogyan működik a poll modul. Lehetséges hogy nem sütivel dolgozik, hanem IP cím alapján? És kerestem, találtam és az IP cím alapú működésre gondolva javítottam is egy gixert: a Statistics modulban javítottam is a $_SERVER['HTTP_HOST'] kódot $_SERVER['HTTP_X_FORWARDED_HOST']-ra.
De ez sem használt neki.

Van valami ötletetek?

Melyik modulhoz, modulokhoz kapcsolódik a téma?: 
Drupal verzió: 
Fórum: 
Illyés Edit képe

A szavazás modul nem működik együtt a gyorstárazással. Az első névtelen látogató, aki szavaz, megkapja a szavazás állását – ezt a rendszer betárazza, tehát a következő névtelen látogatók a szavazóűrlap helyett a szavazás állását fogják látni mindaddig, amíg nem ürül a gyorstár… és akkor újrakezdődik a kör.

Modulokban nem érdemes kódot módosítani, minden frissítéskor újra el kell végezni a módosításokat (és még ez a legkisebb lehetséges probléma).

0
0
Ilusha képe

Megnéztem a gyorstár az tiltva volt.
De van ott egy olyasmi is, hogy Oldal tömörítés, azt most tiltottam le.
Bár nem tiszta egészen nekem a dolog, mert az van oda írva, hogy gyorstárazott oldalakat tömöríti. Mert ugye a gyorstárazás ki volt kapcsolva, azaz elméletileg eddig sem volt mit tömöríteni. De lehet csak nem a legügyesebb a beállítója, és semmi másról nincs szó.

A modul frissítőt azt lefuttattam a módosítás után. A módosítás pedig nem volt felesleges, mert közben néztem, tényleg a szerver és nem a látogatók ip címét látja.
De ezek szerint valahol máshol is kellene.

0
0
Illyés Edit képe

A modul frissítő – ha egyáltalán ugyanarról beszélünk (update.php) – arra való, hogy ha új verziót teszel fel a modulból, akkor szükség esetén frissítse az adatbázist. Azt nem fogja érzékelni, hogy te belemásztál egy modul kódjába.

Ha úgy gondolod, hogy a modul hibás, akkor küldj be hibajegyet, hogy bekerüljön a módosítás a hivatalos kódba. Különben előfordulhat, hogy bevezetsz valami hibát a rendszerbe, ráadásul minden alkalommal, amikor frissítesz, újra és újra át kell írnod a kérdéses részt.

0
0
Ilusha képe

Közben az IP hiba oka kiderült, az includes/bootstrap.inc -fájlban kellett átírnom és már működik is rendesen.
A $_SERVER['REMOTE_ADDR'] helyett $_SERVER['HTTP_X_FORWARDED_FOR'] -t írtam.
Ezt sem illett volna tennem?
Végül is ha jól tudom a két kód ugyanazt jelenti, csak a másik egy újabb féle kifejezése neki és a régit nem érti minden szerver.
Azt viszont nem tudom megmondani még, hogy a szavazógépre milyen hatással van, mert most éppen nincs fenn, ha esetleg ilyen IP cím probléma volt, akkor lehet már működik, hiszen eddig mindenkinek egy volt az IP címe, most már nem.
Még ma valamikor visszarakom a szavazógépet, aztán megírom, hogy most már így megy-e rendesen.

És apropó, jut eszembe, az Állapot jelentés részen: ( /admin/reports/status) egy idő után mindig reklamál, hogy az időzített feladatok nem futottak le.
Pedig én nem időzítettem semmit.
Itt időnként mindig le kellene futtattatnom?
Vagy beállítani neki valahol, hogy időnként automatikusan futtassa le saját maga?
Vagy csak akkor kell ezzel foglalkoznom, ha én magam, személyesen tényleg időzítettem is valamit?

0
0
lazar képe

Szerintem neked itt is és az ezzel párhuzamos, olvasottságmérő topikban is a gyorstárazással van problémád. Kapcsolj ki mindent a teljesítmény oldalon, ürítsd a gyorstárat és úgy próbálkozz. Át lehet írni az eredeti fájlokat, de egyrészt a frissítéskor visszaáll az eredeti verzió, másrészt pedig megtörténhet, hogy elveszíted a fonalat és már nem tudod mit írtál át - akkor majd egy napot kínlódsz, hogy miért nem műkszik. Nekem eddig sem szavazás, sem olvasottságmérés miatt nem kellett átírnom semmit - csak szűkre veszem a cachelést.

0
0
Ilusha képe

Fentebb már írtam. :) És azért biztonság kedvéért a nem létező gyorstárat is ürítettem.

0
0
Ilusha képe

Jól sejtettem, IP cím alapján dolgozik a szavazógép. Tehát az átírás segített.
De szó sincs arról, hogy el kellene veszítenem a fonalat, hiszen fentebb sem írtam mást, mindössze egyetlen kifejezést cseréltem ki egy másikra, minden más érintetlen maradt.

Eddig ugye a rossz kód miatt hiába kérdezte le a látogató ip címét, helyette mindig a tárhelyszerver IP címét kapta meg.
Tehát ha valaki szavazott, utána már nyilván nem engedett mást, a dupla szavazást elkerülendő. Mert hiába volt különböző a két látogató, mindegyikhez nem a saját, hanem a szerver egy és ugyanazon IP címét társította.
Most hogy a kódot javítottam a fentiek szerint - több IP címről is kipróbáltam- most már rendesen működik, és egy ugyanazon IP címről továbbra sem enged senkit duplán szavazni.

Az IP cím alapú szavazásnak persze van egy olyan hátulütője, hogy azoknak az embereknek is összességében is csak egy szavazást enged, akik egy IP címen vannak (úgy halottam pl. a kollégiumi hálózatban lévő gépek lehetnek ilyenek). Másik amit halottam, az sütis megoldás a dupla szavazás elkerülésére, annak is vannak hátul ütői: le lehet tiltva a cookie, vagy akár a felhasználó törli ki, hogy csaljon.

Nem tudom létezik e egyáltalán - regisztráció nélküli - nem túl bonyolult és tökéletes megoldás a szavazásra.

0
0
york képe

Nincs csalas mentes szavazas, ha regisztraciohoz kotod akkor regisztralni fog sok cimmel...

Nah de azert hulyeseget ne terjesszunk:

Eddig ugye a rossz kód miatt hiába kérdezte le a látogató ip címét, helyette mindig a tárhelyszerver IP címét kapta meg.

Ez nem igaz lasd a dokumentaciot:
http://hu.php.net/manual/en/reserved.variables.server.php

 'REMOTE_ADDR'
    The IP address from which the user is viewing the current page. 

Ha neked ott a tarhely szolgaltato cime jelenik meg, akkor ott valami gubanc van.
0
0
Ilusha képe

Nem tudom miért van ez így, én úgy halottam, hogy az új a php nyelvben egy régi utasítás valami újszerű megfogalmazása, azaz a két kód: a
$_SERVER['REMOTE_ADDR']
és
$_SERVER['HTTP_X_FORWARDED_FOR']

az lényegileg ugyanaz. De úgy tűnik ez tényleg hülyeség, semmi újszerűről nincs szó.
Mélyebben nem tudok hozzászólni a dologhoz, mert jobban utána se néztem, és még elég szegényes a php tudásom.
Most azonban rákerestem, és a prog.hu-n is szóba hozta valaki a dolgot, ott arra jutottak, hogy akkor nem működik az első kód, ha egy proxy is van a felállásban:

"Lehet, hogy egy proxy van közöttetek, és te is, meg a gép, amin a php is fut ugyan azt az ip-t látja. Te úgy látod, hogy az a szerver, a php úgy látja, hogy onnan jön a kérés."

http://prog.hu/tudastar/86445/PHP+REMOTE_ADDR+miert+adja+a+szerver+IP+ci...

És ha minden igaz, a webhely szolgáltatóm valóban használ proxyt: akkor tehát ez a "gubanc".

Ha pedig ez így van, akkor érhető, hogy az egyik kód cseréje a másikra nálam megoldotta a problémát és azóta a szavazógép hibátlanul működik, és azon a részen ahol eddig kiírta a látogatók IP címéit, eddig ott is a szerver IP címét halmozta halomba, most pedig már ott is a valós IP címek szerepelnek.

0
0
york képe

Drupalba es a modulokba sminkekbe nem irunk bele, mert kismacskak halnak.
Valamint az ember sem lovi labon magat.
Amire kicserelted az egy X azaz extra valtozo ami vagy van vagy nincs.

0
0
Ilusha képe

"Élvezzem", hogy nem működik, vagy van valami ötleted, hogy mi mást tegyek?
Mert ha úgy hagyom, akkor nem fog.
Igaz, úgy emlékszem, alatta az
if
taggal folytatta a sort, aztán a "én váltózómmal", de hiába.
Lehet meg kellene írni a problémát a készítőjének, hogy orvosolja, hiszen senki sem tökéletes.

0
0
aboros képe

eleg orult otlet.
igen, a proxy miatt van.

masok is futtatnak am drupalt proxy kornyezetbe, gondolod, hogy nem futottak meg ebbe a problemaba es nincs ra mas megoldas, mint barbarul atirkalni a bootstrap inc?

de van.
mondjuk telepiteskor nem lett volna rossz elolvasni pl a default.settings.php filet mielott lemasolod. (sajnos nincs benne az INSTALL.txt -ben, hogy nem art elolvasni.. bar az install txt is tudod hanyan olvassak el? senki kb.. aztan sirnak, hogy nem megy)

szoval idezem a default.settings.php -t:

/**
 * reverse_proxy accepts a boolean value.
 *
 * Enable this setting to determine the correct IP address of the remote
 * client by examining information stored in the X-Forwarded-For headers.
 * X-Forwarded-For headers are a standard mechanism for identifying client
 * systems connecting through a reverse proxy server, such as Squid or
 * Pound. Reverse proxy servers are often used to enhance the performance
 * of heavily visited sites and may also provide other site caching,
 * security or encryption benefits. If this Drupal installation operates
 * behind a reverse proxy, this setting should be enabled so that correct
 * IP address information is captured in Drupal's session management,
 * logging, statistics and access management systems; if you are unsure
 * about this setting, do not have a reverse proxy, or Drupal operates in
 * a shared hosting environment, this setting should be set to disabled.
 */
#   'reverse_proxy' => TRUE,
/**
 * reverse_proxy accepts an array of IP addresses.
 *
 * Each element of this array is the IP address of any of your reverse
 * proxies. Filling this array Drupal will trust the information stored
 * in the X-Forwarded-For headers only if Remote IP address is one of
 * these, that is the request reaches the web server from one of your
 * reverse proxies. Otherwise, the client could directly connect to
 * your web server spoofing the X-Forwarded-For headers.
 */
#   'reverse_proxy_addresses' => array('a.b.c.d', ...),
# );

szoval, sajat settings.php -ban, kiveszed a kommentet a megfelelo sorok elol... reverse_proxy => TRUE, megmondod a reverse_proxy_addresses tombbe a proxy ipket (szolgaltatodtol elkered)..

es kesz.

itt a tema 2007bol, amiben a kerdessel foglalkoznak.. 2007 november 26 ota megoldott a dolog es nem kell hozza atirni a bootstrap.inc!!
http://drupal.org/node/173408

ugyan ez a beallitasi hianyossag okozza a masik problemadat, a statisztika gyaszt..

0
0

-
clear: both;

Ilusha képe

Ezt feltétlenül megpróbálom.

0
0
Ilusha képe

Kipróbáltam, és javításaimat is visszaállítottam vele együtt az eredeti állapotra.
De az égvilágon semmire nem jutottam vele.

Elvettem előlük a # jelet:

'reverse_proxy' => TRUE,
'reverse_proxy_addresses' => array('xxx.xxx.xxx.xxx',),

Az a.b.c.d helyére beírtam az IP címet, a Drupal pedig lefagyott tőle.

0
0
aboros képe

hibanapló bejegyzés? vagy valami fogási pont kéne, mert ez így kevés.
ha valóban proxy van a hálózatban, így kell azt a drupal tudtára adni. ez biztos. a "szolgáltatóddal" közösen tudjátok megoldani ezt a gondot, ilyesmit "távsegítségben" elég nehéz pontosan megjavítani. (főleg, ha annyi a "hibaüzenet" amit látok, hogy "lefagyott":)

0
0

-
clear: both;

Ilusha képe

PHP Parse error: syntax error, unexpected T_DOUBLE_ARROW

0
0
aboros képe

vagy csak csinálod ahogy gondolod?

a settings.php -ban van egy csomó dolog kikommentezve.. logikusan, értelem szerűen azokról a dolgokról kell levenned a kommentezést amikre szükséged van. te most csak úgy huss, levetted az elől a két sor elől amit említettem, aztá' jóvan.. de ez így _nyilván_ nem lesz jó. én nem tudhatom, hogy neked mik vannak eddig a settings.php -ban, a conf tömbhöz kell hozzáadni a proxy beállításokat, ennyit tudok mondani.

valahol van egy olyan rész, hogy conf = array( ... és utána jönnek a paraméter beállítások.. te csak a paraméter beállítások elől vetted el a kommentezést és ezért szintaktikai hibára hajtottad a settings.php -t... erre nem tudok mit mondani, _olvasd el végig_ a settings.php és állítsad be _értelem szerűen_ a te környezetedhez. minden szükséges információ le van írva benne.

0
0

-
clear: both;

Ilusha képe

"szoval, sajat settings.php -ban, kiveszed a kommentet a megfelelo sorok elol... reverse_proxy => TRUE, megmondod a reverse_proxy_addresses tombbe a proxy ipket (szolgaltatodtol elkered)..

es kesz."

Ezenkívül meg lehet hogy gyagya vagyok, de ilyenek vannak:

# 'site_name' => 'My Drupal site',
# 'theme_default' => 'minnelli',
# 'anonymous' => 'Visitor',
# 'maintenance_theme' => 'minnelli',
# $conf['locale_custom_strings_en'] = array(
# 'forum' => 'Discussion board',
# '@count min' => '@count minutes',

ezeknek mi köze van az IP cím lekérdezéshez?

Az angol oldalon, amit belinkeltél, ott viszont írnak valami olyan rosszaságot is, amit én követtem el.

A setting.php fájlomban meg semmi különös nincs, csak az, amit a Drupal telepítéskor bekért:
$db_url =
$db_prefix =

Akkor most..?, ezt nagyon nem értem

0
0
szantog képe

Semmi köze az ip cím lekérdezéséhez.
Te ennyit adtál meg:
'reverse_proxy' => TRUE,
'reverse_proxy_addresses' => array('a.b.c.d', ...),
Ezt php-ül vajon mit jelent? Pont azt, amit kaptál hibaüzenetben.
A settings.php-ben ez egy konfigurációs tömb két eleme. Viszont nálad nincs ilyen tömb, mert ott van a # a # $conf = array( sor előtt. Persze le is kell zárni a tömböt, vagyis a # ); sor előtt sem kell a hash.
Ha nagyon nem megy, töröld ki a /** és */m közötti részeket, és meglátod.

0
0

----
Rájöttem, miért kérdezek olyan ritkán a drupal.hu-n. Amíg szedem össze az infokat a kérdéshez, mindig rájövök a megoldásra.

Ilusha képe

Szantog te vagy egy kezdő lámer megmentője! :) Köszi!
Ti sem születtek egyből enciklopédiával a fejetekben. Persze nyálazzam át a php 24 óra alatt, de sajna ez nem így működik.

Litánia helyett:

$conf = array(
'reverse_proxy' => TRUE,
'reverse_proxy_addresses' => array('xxx.xxx.xxx.xxx'),
);

Szóval:
- megy statisztika, (legutóbbi megtekintések)
- megy a szavazógép

de továbbra sem megy a olvasottság számláló.

0
0
york képe

Ti sem születtek egyből enciklopédiával a fejetekben. Persze nyálazzam át a php 24 óra alatt, de sajna ez nem így működik.

Igen mi sem igy szulettunk, megtanultuk.
Mond el hogy mukodik, ha nem ugy hogy megtanuljuk azt amire szuksegunk van?

0
0
Ilusha képe

Míg tanultál? Csak tanultál?
Olykor sürgősebb egy probléma megoldása, mint az hogy előtte mindent megtanulhass belőle.
Persze aki totál hobbiból készít egy honlapot, hát álljon neki és tanuljon.
De ha valakinek valami miatt sürgős szüksége van rá, akkor a tanulásra nem lesz egyből és rögtön elég ideje.

0
0
york képe

Hihetetlen ugye :).
De elobb megtanultam az alapokat, aztan elkezdtem magamnak jatszadozni, es akkor kertem penzt a tudasomert, amikor tudtam, hogy a feladatot el tudom vegezni.
Ez nem azt jelenti, hogy a munkak alatt nem tanul ujat az ember, de az alapokat igen is tudja.
Egy drupal eseteben ez azt jelenti, hogy:
- HTML + CSS
- PHP nyelv ismerete (szintaktika, fontosabb parancsok)
- JS + jQuery (lasd. php)

Ha ezeket nem ismered akkor, allandoan falakba utkozol, es a falak lebontasa sokkal tovabb tart, mint atfutni egy PHP, CSS stb. konyvet.

De ha valakinek valami miatt sürgős szüksége van rá, akkor a tanulásra nem lesz egyből és rögtön elég ideje.

Ha magadnak csinalod lelked rajta, de penzt kerni mastol olyanert amihez nem ertek, nekem nem lenne pofam hozza.

0
0
Ilusha képe

Nem magamnak csinálom, másoknak, a látogatóknak, de honlapommal meg egy fillért nem keresek és semmi ilyen célja nincs neki. Biztos van olyan, aki pénzkereső honlapot készít, de az enyém nem olyan.

0
0