Prosíme přihlašte se nebo zaregistrujte.

Přihlašte se svým uživatelským jménem a heslem.
Vaše pomoc je stále potřeba!

Autor Téma: PHP skript na ovladani rele pomoci printserveru  (Přečteno 2784 krát)

karlitos

  • Stálý člen
  • **
  • Příspěvků: 1057
  • Bioinformatics - solutions in-silico
    • homepage
PHP skript na ovladani rele pomoci printserveru
« kdy: 27 Října 2010, 22:08:28 »
Zdravim

Stale delam na svem projektu a zprovoznil jsem si doma takovy maly NAS na kterem beha linux a webserver. Takze se ve svych snahach pokrocil k tomu, ze ten printserver ovladam pomoci PHP skriptu primo z webove stranky. Jeden takovy skript jsem si nasel,lehce upravul a FUNGUJE ! Parada, kliknutm muzu z Honolulu zapnout spotrebic u nas doma. Jenze ten skript je uplne zakladni a potreboval bych ho rozsirit o par veci. Takze jsem si ten formular otevrel v KompoZeru (a znalci uz zvraci) a nahazel jsem si tam nejaky elementy ... a tim vicemene skoncil.
Odhledneme od toho ze ten KompoZer je docela za trest. Ale nedari se mi zprovoznit ani zakladni funkce ktere se snazim pridat.
Tady je original :
Kód: [Vybrat]
<?php
/***********************************************************************************
* Network Something - php script.
* Original idea from Praxis Doktor Andy
* (http://www.doktor-andy.de/joomla/index.php?option=com_content&task=view&id=40&Itemid=52)
* This script was created by Jason Hensler (www.colddarkness.com)
* This script is released under the GNU/GPL License.
********************************************************************************/


error_reporting(E_ALL); //turn on error reporting for debugging this can be commented out

if(!isset($_REQUEST['Submit'])) //check if user submitted form
{
        
//generate user input form
                
?>

<form id="form1" name="form1" method="post" action="">
<p>Bits to send to print server:<br>
<label><input type="checkbox" name="bit8" value="true" /></label>
<label><input type="checkbox" name="bit7" value="true" /></label>
<label><input type="checkbox" name="bit6" value="true" /></label>
<label><input type="checkbox" name="bit5" value="true" /></label>
<label><input type="checkbox" name="bit4" value="true" /></label>
<label><input type="checkbox" name="bit3" value="true" /></label>
<label><input type="checkbox" name="bit2" value="true" /></label>
<label><input type="checkbox" name="bit1" value="true" /></label>
<br>
<label>
  <input type="submit" name="Submit" value="Send" />
  </label>
</form>
<?php
} else {
//if user has submited data
// The raw port number for the print server
$service_port "9100";
// The network address of the print server
// This can be an ip address or a network name
$address gethostbyname('192.168.178.14');

Echo 
"Creating socket...";
$socket socket_create(AF_INETSOCK_STREAMSOL_TCP); //create the socket or fail
if ($socket === false) {
 echo 
"<br><b>socket_create() failed: reason: " .
 
socket_strerror(socket_last_error()) . "</b>\n";
 die();
} else {
  echo 
"OK.<br>";
}
echo 
"Connecting to print server: " $address "...";
$result socket_connect($socket$address$service_port); //connect to the print server
if ($result === false) {
  echo 
"<br><b>socket_connect() failed.\nReason: ($result) " .
socket_strerror(socket_last_error($socket)) . "</b>\n";
  die();
} else {
echo 
"OK.<br>";
}
$out=0;
//check to see if which boxes have been checked and add thier bit value to $out
// bit num: 8   7  6  5  4  3  2  1
// value:  128 64 32 16  8  4  2  1

if(isset($_REQUEST['bit8'])) {
    
$out +=1;
}
if(isset(
$_REQUEST['bit7'])) {
    
$out += 2;
}
if(isset(
$_REQUEST['bit6'])) {
    
$out += 4;
}
if(isset(
$_REQUEST['bit5'])) {
    
$out += 8;
}
if(isset(
$_REQUEST['bit4'])) {
    
$out +=16;
}
if(isset(
$_REQUEST['bit3'])) {
    
$out += 32;
}
if(isset(
$_REQUEST['bit2'])) {
    
$out += 64;
}
if(isset(
$_REQUEST['bit1'])) {
    
$out += 128;
}
echo 
"Sending to print server...<br>";
// since php does not have byte type varables and wants to send ascii over sockets
// we use chr($out) to send the char with the matching value of the value we want to send
socket_write($socketchr($out), strlen(chr($out)));
socket_close($socket); // close the socket
echo "Sent!<br>";
}
?>

Zakladni funkcnost je mi jasna, ale napriklad bych rad aby se IP/host dalo zadat do textoveho pole, aby tam bylo tlacitko Reset na poslani 0 (vsechny rele vypnute) atd ... tak jsem ten formluar nejdriv upravil takto :
Kód: [Vybrat]
<form id="form1" name="form1" method="post" action="">
<div style="text-align: center;"></div>
<p style="text-align: center;"><span
style="text-decoration: underline;">A simple script for driving Relays
over Printserver</span><br>
</p>

<p style="text-align: center;">Ip-adress/hostname of the printserver :</p>
<div style="text-align: center;"> Host: <input name="IP" type="text"><br></div>
<div style="text-align: center;"><button name="default_ip">Set as default adress</button></div>

<div style="text-align: center;"><button name="default_ip">set as
default adress</button></div>

<p style="text-align: center;"><br>
</p>
<hr style="width: 100%; height: 2px;">
<p style="text-align: center;">Bits to send to print server:</p>
<br>

<p style="text-align: center;">
<label><input name="bit8" value="true" type="checkbox"></label>
<label><input name="bit7" value="true" type="checkbox"></label>
<label><input name="bit6" value="true" type="checkbox"></label>
<label><input name="bit5" value="true" type="checkbox"></label>
<label><input name="bit4" value="true" type="checkbox"></label>
<label><input name="bit3" value="true" type="checkbox"></label>
<label><input name="bit2" value="true" type="checkbox"></label>
<label><input name="bit1" value="true" type="checkbox"></label>
</p>
<div style="text-align: center;"><button name="send">&nbsp;
Send&nbsp;&nbsp;</button>&nbsp;&nbsp;<button name="reset"> Reset&nbsp;</button>
<br>
</div>
</form>
Vypada to jak kdyby to programoval nekdo z dob UsssR ale OK. No a ted potrebuju aby se do promene $address ulozila IP nebo hostname z textoveho pole Host: - no a tim to cele konci
Pouzil jsem
Kód: [Vybrat]
$address = gethostbyname($_POST['IP']);ale to nejak nechce fungovat.

Ano RTFM, na druhou stranu nehodlam se PHP prilis moc zabyvat, potrebuju jen tuhle jednu vec, kdyby mi nekdo mohl dat trochu hint , budu moc rad, diky K
« Poslední změna: 28 Října 2010, 10:46:53 od karlitos »
Lenovo ThinkCentre A61 912073G
Athlon X2 5000+ 4GB RAM Nvidia Geforce 9500GT
Linux Mint 9 Isadora , Win7 64Bit

Martin - ViPEr*CZ*

  • Závislák
  • ***
  • Příspěvků: 3047
Re: PHP skript na ovladani rele pomoci printserveru
« Odpověď #1 kdy: 27 Října 2010, 22:52:49 »
A koukal jste co se Vám odesílá v tomto $_POST['IP'] ?
Open source is gold way... Mint 17.2, Debian 8.1 Jessie| Ubuntu Wiki (návody) | Google vyhledávač | Qt4 návody

karlitos

  • Stálý člen
  • **
  • Příspěvků: 1057
  • Bioinformatics - solutions in-silico
    • homepage
Re: PHP skript na ovladani rele pomoci printserveru
« Odpověď #2 kdy: 28 Října 2010, 08:18:00 »
Nekoukal, anzto nevim jak - dobre jdu googlit. Originalni skript po zaklikani tech checkboxu nacte novou stranku, kde to vypise informace ze se vytvari socket, pripojuje ... Ted to - po stisknuti Send - jenom problikne, nestane se nic.
Mimojine to bych taky rad zmenil - aby dole pod skriptem bylo okno do ktereho se ty zpravy budou vepisovat a ne aby se pokazde nacetla nova stranka.
Lenovo ThinkCentre A61 912073G
Athlon X2 5000+ 4GB RAM Nvidia Geforce 9500GT
Linux Mint 9 Isadora , Win7 64Bit

romciiik

  • Stálý člen
  • **
  • Příspěvků: 532
    • romiix.org
Re: PHP skript na ovladani rele pomoci printserveru
« Odpověď #3 kdy: 28 Října 2010, 10:07:46 »
originalny PHP script pravdepodobne nie je cely

karlitos

  • Stálý člen
  • **
  • Příspěvků: 1057
  • Bioinformatics - solutions in-silico
    • homepage
Re: PHP skript na ovladani rele pomoci printserveru
« Odpověď #4 kdy: 28 Října 2010, 10:57:27 »
originalny PHP script pravdepodobne nie je cely

OOOps... omlouvam se uz jsem to opravil.

No jak jsem pochopil - funguje to takto : To co je mezi tagy <form> a </form> je ten formular - tedy ty graficky prvky. Promene $service_port a $address jsou taky jasne a tam bych potreboval aby to slo zadavat z toho formulare. Pak to zkusi vytvorit socket -  vyhodi to chybovou hlasku a ... ? (k cemu je to die() ? ) Kdyz se to povede napise to Ok, pak to kontroluje ktery checkboxy jsou zaskrtly a podle toho inkrementuje promennou $out a nakonci to posle prez socket data co jsou v promenne $out

No naotlik jsem tomu porozumel, ale treba nechapu jak je spojena akce - zmacknu tlacitko Send s akci ze se vytvori socket a poslou data. Natoz jak udelat jiny tlacitko ktery by poslalo $out=0; Ono by slo ze by se pomoci reset nejdriv odznacily vsechny checkboxy a pak se to teprve pomoci send potvrdilo, ale skoro je lepsi aby po kliknuti na reset to rovnou odznacilo checkboxy a poslalo data.
No a vystup do nejakeho textoveho pole ...

Snazim se neco si o tom najit, problem je ze vetsina ruznych PHP tutorialu se vztahuje na jinou syntaxi a moc jsem to zatim nepobral.
Lenovo ThinkCentre A61 912073G
Athlon X2 5000+ 4GB RAM Nvidia Geforce 9500GT
Linux Mint 9 Isadora , Win7 64Bit

romciiik

  • Stálý člen
  • **
  • Příspěvků: 532
    • romiix.org
Re: PHP skript na ovladani rele pomoci printserveru
« Odpověď #5 kdy: 28 Října 2010, 11:08:05 »
Rád by som pomohol, ale nejak nechápem čo vlastne potrebuješ. Skúsim si to ešte pár krát prečítať a vstrebať. S printservrom, NAS a používaním socketov nemám skúsenosti, ale PHP mi problém nerobí.
Vyzerá to zaujímavo, rád pomôžem.
« Poslední změna: 28 Října 2010, 11:10:15 od romciiik »

karlitos

  • Stálý člen
  • **
  • Příspěvků: 1057
  • Bioinformatics - solutions in-silico
    • homepage
Re: PHP skript na ovladani rele pomoci printserveru
« Odpověď #6 kdy: 28 Října 2010, 11:17:54 »
No zatim v tom totalne bloudim, ale kdybys mohl - treba i radou, budu moc rad.
Problem mam s tim ze ten originalni PHP skript funguje ale pouze nasledujicim zpusobem :
IP/host a port je natvrdo zadane do kodu. (coz neni moc dobre reseni) Kdyz to odesle data tak se nacte nova stranka na ktere jsou vypsane informace bud  o chybe nebo o tom ze je vse  Ok a ze to posila/poslalo data. A pak musim kliknout na Zpet v prohlizeci abych se vratil k puvodnimu formulari.
Tak jsem si udelal novy formular - v KompoZeru  :-X ale lip zatim neumim - kde jsem si udelal pole na vespani IP adresy nebo hostname.
Potrebuju aby se po stisknuti tlacitka Send nacetla ta hodnota te IP nebo hostname co je v tom textovem poli a ulozila do promenne $address. To same si asi udelam jeste pro port. No a aby jsem dole mel nejake pole kde se budou zobrazovat ty informace co ten skript generuje a nenacitalo se to v nove strance-
To v zakladu, jeste bych rad aby se zadana adresa  dala ulozit jako "defaultni" Tady abych mel promennou $default_adress jejiz hodnota by byla defaultne zobrazena v tom textovem poli pro IP a kdyz zadam treba jinou a zmacknu "make default" aby se ta hodnota prepsala. Priste az se skript nacte by tam byla nova defaultni adresa...
A pak jeste tlacitko Reset ktere posle hodnotu promenne $out 0 (zadne rele sepnute) a vymaze vsechny oznacene checkboxy.
No asi tak.  :) koukam ze si nejak moc vymyslim

Diky za vse K
« Poslední změna: 28 Října 2010, 11:25:37 od karlitos »
Lenovo ThinkCentre A61 912073G
Athlon X2 5000+ 4GB RAM Nvidia Geforce 9500GT
Linux Mint 9 Isadora , Win7 64Bit

romciiik

  • Stálý člen
  • **
  • Příspěvků: 532
    • romiix.org
Re: PHP skript na ovladani rele pomoci printserveru
« Odpověď #7 kdy: 28 Října 2010, 11:45:50 »
Kód: [Vybrat]
<?php
/***********************************************************************************
* Network Something - php script.
* Original idea from Praxis Doktor Andy
* (http://www.doktor-andy.de/joomla/index.php?option=com_content&task=view&id=40&Itemid=52)
* This script was created by Jason Hensler (www.colddarkness.com)
* This script is released under the GNU/GPL License.
********************************************************************************/


error_reporting(E_ALL); //turn on error reporting for debugging this can be commented out

if(isset($_POST['Submit'])) {
echo "<pre>";
print_r($_POST);
echo "</pre>";
}

        
//generate user input form
                
?>

<form id="form1" name="form1" method="post" action="">
<p>Bits to send to print server:<br>
<label><input type="checkbox" name="bit8" value="true" /></label>
<label><input type="checkbox" name="bit7" value="true" /></label>
<label><input type="checkbox" name="bit6" value="true" /></label>
<label><input type="checkbox" name="bit5" value="true" /></label>
<label><input type="checkbox" name="bit4" value="true" /></label>
<label><input type="checkbox" name="bit3" value="true" /></label>
<label><input type="checkbox" name="bit2" value="true" /></label>
<label><input type="checkbox" name="bit1" value="true" /></label>
<br>
IP: <input name="ip" value="192.168.178.14">
<input type="button" value="default" onclick="document.form1.ip.value = '192.168.178.14'"><br>
PORT: <input name="port" value="9100"><br>

  <input type="submit" name="Submit" value="Send" />
  <input type="reset"/>
 
</form>
<?
if(isset($_POST['Submit'])) //check if user submitted form
{
//if user has submited data
// The raw port number for the print server
$service_port = $_POST['port'];
// The network address of the print server
// This can be an ip address or a network name
$address = gethostbyname($_POST['ip']);

Echo "Creating socket...";
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP); //create the socket or fail
if ($socket === false) {
 echo "<br><b>socket_create() failed: reason: " .
 socket_strerror(socket_last_error()) . "</b>\n";
 die();
} else {
  echo "OK.<br>";
}
echo "Connecting to print server: " . $address . "...";
$result = socket_connect($socket, $address, $service_port); //connect to the print server
if ($result === false) {
  echo "<br><b>socket_connect() failed.\nReason: ($result) " .
socket_strerror(socket_last_error($socket)) . "</b>\n";
  die();
} else {
echo "OK.<br>";
}
$out=0;
//check to see if which boxes have been checked and add thier bit value to $out
// bit num: 8   7  6  5  4  3  2  1
// value:  128 64 32 16  8  4  2  1

if(isset($_REQUEST['bit8'])) {
    $out +=1;
}
if(isset($_REQUEST['bit7'])) {
    $out += 2;
}
if(isset($_REQUEST['bit6'])) {
    $out += 4;
}
if(isset($_REQUEST['bit5'])) {
    $out += 8;
}
if(isset($_REQUEST['bit4'])) {
    $out +=16;
}
if(isset($_REQUEST['bit3'])) {
    $out += 32;
}
if(isset($_REQUEST['bit2'])) {
    $out += 64;
}
if(isset($_REQUEST['bit1'])) {
    $out += 128;
}
echo "Sending to print server...<br>";
// since php does not have byte type varables and wants to send ascii over sockets
// we use chr($out) to send the char with the matching value of the value we want to send
socket_write($socket, chr($out), strlen(chr($out)));
socket_close($socket); // close the socket
echo "Sent!<br>";
}
?>

karlitos

  • Stálý člen
  • **
  • Příspěvků: 1057
  • Bioinformatics - solutions in-silico
    • homepage
Re: PHP skript na ovladani rele pomoci printserveru
« Odpověď #8 kdy: 28 Října 2010, 12:19:06 »
 ;D  ;D  ;D
diky moc, krasne to funguje. Jen par musek :
Nahore - nad tim skriptem mi to zobrazi
Kód: [Vybrat]
Array
(
    [bit6] => true
    [bit5] => true
    [bit4] => true
    [bit3] => true
    [bit2] => true
    [bit1] => true
    [ip] => 192.168.178.14
    [port] => 9100
    [Submit] => Send
)
tedy podle toho jaka rele jsou zapnuta. Jinak zbyle informace mi to krasne vypisuje pod tim formularem.
No a k te defaultni IP - ja jsem spis myslel takhle :
Kód: [Vybrat]
...
<input type="button" value="default" onclick="document.form1.ip.value = $_POST['default_host']"><br>
<input type="button" name="make default" value="?????" onclick="default_host.value = $_POST['ip']"><br>

$default_host = gethostbyname('192.168.178.14');...
$address = gethostbyname($_POST['ip']);
...
aby sla zadana IP adresa ulozit jako defaultni.
No a pak k tomu reset tlacitku - nejak moc nevim jak to udelat. Aby to onclick odoznacilo vsechny checkbox, out pripadilo 0 a poslalo to data ...

Zkusim nad tim jeste popremyslet ae moc moc diky uz tkahle je to tisickrat lepsi.
« Poslední změna: 28 Října 2010, 13:02:34 od karlitos »
Lenovo ThinkCentre A61 912073G
Athlon X2 5000+ 4GB RAM Nvidia Geforce 9500GT
Linux Mint 9 Isadora , Win7 64Bit

romciiik

  • Stálý člen
  • **
  • Příspěvků: 532
    • romiix.org
Re: PHP skript na ovladani rele pomoci printserveru
« Odpověď #9 kdy: 28 Října 2010, 16:56:32 »
zajtra sa ti na to pozrem, malo by sa dat spravit vsetko z toho

Dragonn

  • Návštěvník
  • Příspěvků: 86
Re: PHP skript na ovladani rele pomoci printserveru
« Odpověď #10 kdy: 28 Října 2010, 17:10:59 »
Tak ten kód nahoře nad formulářem byl pravděpodobně přidán jenom pro debug, pro ověření, co se vlastně přesně posílá, takže ho odstraníš smaznáním:
Kód: [Vybrat]
if(isset($_POST['Submit'])) {
    echo "<pre>";
    print_r($_POST);
    echo "</pre>";
}

Potom nevim jak to přesně chceš...předpokládám, že když odešleš formulář s nějakou novou IP adresou, tak aby příště se ti tam zobrazovala ta poslední zadaná... a potom jsou tu dvě možnosti 1) aby se ukládání poslední zadaný IP adresy vztahovalo k danému PC, ze kterého byl odeslán formulář (cookies na daném pc), nebo 2) aby se poslední zadaná IP adresa uložila globálně vrámci tohodle tvýho skriptu.

Jinak pokud ti jde o tlačítko, který by odeslalo příkaz se všemi bity v nule, pak si přidej mezi někam checkbox:
Kód: [Vybrat]
Reset All? <input type="checkbox" name="resetall" value="true" />a potom před řádek
Kód: [Vybrat]
echo "Sending to print server...<br>";vlož ještě tohle:
Kód: [Vybrat]
if(isset($_POST['resetall']){
    $out = 0;
}

A jako poslední úpravu teďko doporučuju z důvodu bezpečnosti všechny $_REQUEST přepsat na $_POST
Pokud něco alespoň trochu funguje, je lepší se v tom nešťourat.
Ntb: MSI EX300X, Core 2 duo 2GHz, 4GB RAM, ATI HD3450 256MB, Ubuntu 9.10

karlitos

  • Stálý člen
  • **
  • Příspěvků: 1057
  • Bioinformatics - solutions in-silico
    • homepage
Re: PHP skript na ovladani rele pomoci printserveru
« Odpověď #11 kdy: 28 Října 2010, 22:42:56 »
Predne vsem moc diky !

Takze jak radil Dragonn jsem zakomentoval ten kod na zacatku a uspech. Zmenil jsem vsechny REQUEST na POST a taky dobry. Pridal jsem ten checkbox - to taky jeste fungovalo jak se patri. Ale  s tim
Kód: [Vybrat]
if(isset($_POST['resetall']){
    $out = 0;
}

mi to zobrazi jen bilou stranku.
K tomu jeste : myslel jsem ze by bylo smyslupnejsi udelat to spis :
Kód: [Vybrat]
/if(isset($_POST['resetall']){
    $out = 0;
}
else{
if(isset($_POST['bit8']))
....
Preci jenom je vice  logicke neprovadet vsechny ty inkrementace - pokud chci poslat nulu. Lepereceno nedelat nejdriv nekolik souctu abych posleze promenou stejne dal rovno 0.

No ten reset bych mel radsi jako tlacitko ktere by rovnou poslalo i dana data a taky nejak poresit aby si to pamatovalo posledni stav relatek ... ale vcelku jsem vubec rad ze mi tkahle pomahate. Jinak neni nutne ziskavat IP/hostname primo z aktualniho klienta. Uplne by stacilo kdyby se ukladala do nejake globalni promenne.

Ja ted poradne zkonfiguruju server a pak udelam ucet, nastavim portforwarding, hodim sem link a muzete mi v Berline zapinat relatka do aleluja  ;D ;D ;D bude legrace
Lenovo ThinkCentre A61 912073G
Athlon X2 5000+ 4GB RAM Nvidia Geforce 9500GT
Linux Mint 9 Isadora , Win7 64Bit

Dragonn

  • Návštěvník
  • Příspěvků: 86
Re: PHP skript na ovladani rele pomoci printserveru
« Odpověď #12 kdy: 29 Října 2010, 11:47:20 »
Jo, to co navrhuješ je lepší... a funguje ti to tak? Jinak pokud chceš reset jako tlačítko tak místo toho checkboxu dáš
Kód: [Vybrat]
<input type="submit" value="Odeslat reset" name="resetall" />Akorát si nejsem uplně jistej, jestli náhodou ti to nebude blbnout...mam takovej pocit, že dřív to v nějakejch prohlížečích fungovalo špatně, tak kdyby se ti pak nešli relátka zapínat, tak to budeš muset vrátit...ale snad ne :o).

Jinak PHP je nestavový...tzn nelze uložit nějakou globální proměnnou, kterou si to bude pamatovat. Jediný, co můžeš udělat je, že tu IP adresu uložíš do cookies a bude si to pamatovat pro každej počítač zvlášť (na implementaci jednodušší = méně příkazů), nebo jí zapíšeš třeba do souboru a pak to bude globálně. Klidně ti napíšu, jak udělat oboje, jenom si řekni, jak se ti to bude víc hodit :-)
Pokud něco alespoň trochu funguje, je lepší se v tom nešťourat.
Ntb: MSI EX300X, Core 2 duo 2GHz, 4GB RAM, ATI HD3450 256MB, Ubuntu 9.10

karlitos

  • Stálý člen
  • **
  • Příspěvků: 1057
  • Bioinformatics - solutions in-silico
    • homepage
Re: PHP skript na ovladani rele pomoci printserveru
« Odpověď #13 kdy: 29 Října 2010, 12:25:45 »
Ahoj

No jak jsem psal - nefunguje ani verze 1 . - tedy  :
Kód: [Vybrat]
if(isset($_POST['resetall']){
    $out = 0;
}
pred radkem
Kód: [Vybrat]
echo "Sending to print server...<br>";
Vysledkem byla bila stranka. Muzu se podivat co mi lighttpd vyhodi za chyby - ...
aaaha :
Kód: [Vybrat]
2010-10-29 12:15:21: (mod_fastcgi.c.2175) FastCGI-stderr: PHP Parse error:  syntax error, unexpected '{' in /shares/internal/PUBLIC/WWW/Welcome/Iprelay/index.php on line 102
...
... AAAA chybejici ) v tom kodu od tebe, uz jsem to opravill uz se to zobrazuje.
Takze testneme funkcnost ....
 ;D   ;D  ;D
bajecny.
Takze aktualni kod je :
Kód: [Vybrat]
<?php
/***********************************************************************************
* Network Something - php script.
* Original idea from Praxis Doktor Andy
* (http://www.doktor-andy.de/joomla/index.php?option=com_content&task=view&id=40&Itemid=52)
* This script was created by Jason Hensler (www.colddarkness.com)
* This script is released under the GNU/GPL License.
********************************************************************************/


error_reporting(E_ALL); //turn on error reporting for debugging this can be commented out

/*if(isset($_POST['Submit'])) {
* echo "<pre>";
* print_r($_POST);
* echo "</pre>";
*}
*/
        //generate user input form
                
?>

<form id="form1" name="form1" method="post" action="">
<p>Bits to send to print server:<br>
<label><input type="checkbox" name="bit8" value="true" /></label>
<label><input type="checkbox" name="bit7" value="true" /></label>
<label><input type="checkbox" name="bit6" value="true" /></label>
<label><input type="checkbox" name="bit5" value="true" /></label>
<label><input type="checkbox" name="bit4" value="true" /></label>
<label><input type="checkbox" name="bit3" value="true" /></label>
<label><input type="checkbox" name="bit2" value="true" /></label>
<label><input type="checkbox" name="bit1" value="true" /></label>
Reset all <label><input type="checkbox" name="resetall" value="true" /><label>
<br>
IP: <input name="ip" value="192.168.178.14">
<input type="button" value="default" onclick="document.form1.ip.value = '192.168.178.14'"><br>
PORT: <input name="port" value="9100"><br>

  <input type="submit" name="Submit" value="Send" />
  <input type="reset"/>
  
</form>
<?
if(isset($_POST['Submit'])) //check if user submitted form
{
//if user has submited data
// The raw port number for the print server
$service_port = $_POST['port'];
// The network address of the print server
// This can be an ip address or a network name
$address = gethostbyname($_POST['ip']);

Echo "Creating socket...";
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP); //create the socket or fail
if ($socket === false) {
 echo "<br><b>socket_create() failed: reason: " .
 socket_strerror(socket_last_error()) . "</b>\n";
 die();
} else {
  echo "OK.<br>";
}
echo "Connecting to print server: " . $address . "...";
$result = socket_connect($socket, $address, $service_port); //connect to the print server
if ($result === false) {
  echo "<br><b>socket_connect() failed.\nReason: ($result) " .
socket_strerror(socket_last_error($socket)) . "</b>\n";
  die();
} else {
echo "OK.<br>";
}
$out=0;
//check to see if which boxes have been checked and add thier bit value to $out
// bit num: 8   7  6  5  4  3  2  1
// value:  128 64 32 16  8  4  2  1
//if(isset($_POST['resetall']){
//    $out = 0;
//}
//else{
if(isset($_POST['bit8'])) {
$out +=1;
}
if(isset($_POST['bit7'])) {
$out += 2;
}
if(isset($_POST['bit6'])) {
$out += 4;
}
if(isset($_POST['bit5'])) {
$out += 8;
}
if(isset($_POST['bit4'])) {
$out +=16;
}
if(isset($_POST['bit3'])) {
$out += 32;
}
if(isset($_POST['bit2'])) {
$out += 64;
}
if(isset($_POST['bit1'])) {
$out += 128;
//}
}
if(isset($_POST['resetall'])){
    $out = 0;
}
echo "Sending to print server...<br>";
// since php does not have byte type varables and wants to send ascii over sockets
// we use chr($out) to send the char with the matching value of the value we want to send
socket_write($socket, chr($out), strlen(chr($out)));
socket_close($socket); // close the socket
echo "Sent!<br>";
}
?>

No a co s globalnima promennyma primo v tom PHP kodu, ty nelze zmenit ? To zavani trochu perpetum mobile - program si sam upravje svuj vlastni kod - to je pomlau o strach na to pak neco pripojit, nakonec se jeste dockame Terminator 99 : vzpoura printserveru  ;D
Ale koneckoncu nejaej malej .conf souborek - proc ne.
Aby si to umelo pamatovat stav tech relatek - takhle totiz kdyz zapnu 1,2,3,4,5,6,7 a chci zapnout jeste 8 musim znovu vsech 8 naklikat.

EDIT :
HOUSTNE mame tady maly problem. Kdyz kliknu do toho policka pro IP tak mi to oznacuje a odoznacuje ten checkbox pro Reset all
« Poslední změna: 29 Října 2010, 12:32:35 od karlitos »
Lenovo ThinkCentre A61 912073G
Athlon X2 5000+ 4GB RAM Nvidia Geforce 9500GT
Linux Mint 9 Isadora , Win7 64Bit

 

Provoz zaštiťuje spolek OpenAlt.