SNMP AGENT
BÄ°LGÄ°
Faydalı Linkler
Ek Özellikler
- SNMP IP tarama ve IP degistirebilen program yazilacak
- 4 G modem eklenerek çalıştırılacak.
- v3 yapılacak. (v2,v2c de desteklenecek)
- Update ve uzaktan bağlanma yapılacak.
- USB den de update yapılacak
- Lisan update için versiyon kodlaması 1.0.0.0 şeklinde dört haneye geçir ve hanelerin manasını belirle.
- SNMP nin manual i gözden geçirilecek.
- Update menusunde o anki versiyonunu ekrana yaz.
snmp version comperantion
V1 ile V3 Arasında tcpdump ile Farklar
�uan ki Cihazın Engine ID si 80001F8880A8C84459A3B9BB5E
V3 için Kullanıcı Eklemek
net-snmp-config komutu ile kullanıcı eklemek
> sudo apt-get install net-snmp-config
> sudo apt-get install libsnmp-dev
> net-snmp-config yazıp help bilgilerine erişebilirsin.
> service snmpd stop
> sudo net-snmp-config --create-snmpv3-user -ro -a md5hakan -x aeshakan -X AES -A MD5 hakan
> sudo net-snmp-config --create-snmpv3-user -ro -a md5tafi8234 -x aestafi8234 -X AES -A MD5 ibo
> sudo net-snmp-config --create-snmpv3-user -ro -a md5hakan -x aeshakan -X AES -A MD5 hakanusta
adding the following line to /var/lib/snmp/snmpd.conf:
createUser hakanusta MD5 "md5hakan" AES aeshakan
adding the following line to /usr/share/snmp/snmpd.conf:
rouser hakanusta
> sudo net-snmp-config --create-snmpv3-user -ro -a md5deneme -A MD5 deneme
adding the following line to /var/lib/snmp/snmpd.conf:
createUser deneme MD5 "md5deneme" DES
adding the following line to nano /var/lib/snmp/snmpd.conf:
rouser deneme
> service snmpd start
Yukarıdaki komutu yazdığında yeni kullanıcı oluşur. Bunu
> nano /var/lib/snmp/snmpd.conf
içerisinde ve
> nano /usr/share/snmp/snmpd.conf
içerisinde görebilirsin.
Ek bilgi :
rouser ibo yanına priv .1 yani rouser ibo priv .1
yazmanında bir anlamı vardır.
- user1 with no authentication or privacy
- user2 with authentication but no privacy
- user3 with authentication and privacy
Manual kullanıcı eklemek
> service snmpd stop
> nano /etc/snmp/snmpd.conf
createUser ali MD5 "md5tafi8234" AES "aestafi8234"
yazılıp
> nano /var/lib/snmp/snmpd.conf
rouser ali
ya da rwuser ali
> service snmpd start
gibi yazılırsa manual olarak kullanıcı eklenmiş olur.
> nano /var/lib/snmp/snmpd.conf
Yine yukarıdaki dosyaya baktığımızda kullanıcının eklendiğini görebiliriz.
V3 manual kullanıcı eklemek ve çıkarmak (web)
link:CONGTOGEL
In my understandings, the net-snmp-create-v3-user
 would simply do the following:
service stop snmpd
$EDITOR /var/lib/net-snmp/snmpd.conf - my link -> /var/lib/snmp/snmpd.conf
[add *usmUser* lines]
$EDITOR /etc/snmp/snmpd.conf
[add *rouser* and *rwuser* lines]
service start snmpd
The snmpd should be stopped before adding new user data in the .conf files.
Equivalent to net-snmp-create-v3-user
, removing an user would be something similar:
service stop snmpd
$EDITOR /var/lib/net-snmp/snmpd.conf - my link -> /var/lib/snmp/snmpd.conf
[find and remove *usmUser* info]
$EDITOR /etc/snmp/snmpd.conf
[find and remove *rouser* and *rwuser* info]
service start snmpd
Rather than printable characters, the usmUser fields are expressed as hex strings. They are simply not encrypted.
PowerSNMP Free Manager V3 Ayarları
Komut Satırından V3 te snmpget ile data çekmek
> snmpget -v 3 -l authPriv -u bulo -A '12345678' -x AES -X '123456789' -a MD5 10.0.0.197 .1.3.6.1.4.1.54358.1.1.5.1.2.0
cevap : iso.3.6.1.4.1.54358.1.1.5.1.2.0 = STRING: "STS203"
Trap Çalışmaları
link:
http://www.net-snmp.org/tutorial/tutorial-5/commands/snmptrap.htmlhttp://www.net-snmp.org/wiki/index.php/TUT:snmptrap_SNMPv3
calisan v1 snmp trap
snmptrap -v 1 -c public 10.0.0.105 '.1.3.6.1.4.1.54358' '10.0.0.197' 6 22 '' .1.3.6.1.4.1.54358 s "Sound Off"
calisan v2c snmp trap
snmptrap -v 2c -c public 10.0.0.105 '' '.1.3.6.1.4.1.54358' .1.3.6.1.4.1.54358 s "Sound Off"
snmptrap -v 2c -r '3' -t '5' -c public 10.0.0.105 '' '.1.3.6.1.4.1.54358' .1.3.6.1.4.1.54358 s "Sound Off"
-r repeat
-t timeout (sn)
calisan v3 snmp trap
snmptrap -v 3 -u 'bulo' -a MD5 -A 12345678 -l authNoPriv 10.0.0.105 6 .1.3.6.1.4.1.54358
snmptrap -v 3 -u bulo -l authNoPriv -x AES -X 123456789 -a MD5 -A 12345678 10.0.0.105 '' '.1.3.6.1.4.1.54358' .1.3.6.1.4.1.54358 s "Sound off"
- öncekine göre daha doğru (D:\01_PROJELER\19_SNMP_AGENT\v3\authNpPriv.JPG)
> snmptrap -v 3 -u bulo -l authPriv -x AES -X 123456789 -a MD5 -A 12345678 10.0.0.105 '' '.1.3.6.1.4.1.54358' .1.3.6.1.4.1.54358 s "Sound off"
- Çalıştı, fakat power snmp free manger üzerinde şifre girip açmak gerekiyormuş. Aşağıdaki ayarlar yapılmalıdır.
- Yukarıdaki komutu terminalden gönderdiğimde aşağıdaki şekli alırız.
Inform Çalışmaları
V2c trap
> snmptrap -v 2c -c public 10.0.0.105 '' '.1.3.6.1.4.1.54358' .1.3.6.1.4.1.54358.1.1.4.4.1.26 s "Sound Off"
V2 inform
> snmptrap -Ci -v 2c -c public 10.0.0.105 '' '.1.3.6.1.4.1.54358' .1.3.6.1.4.1.54358.1.1.4.4.1.26 s "Sound Off"
V3 trap
> snmptrap -v 3 -u bulo -l authPriv -x AES -X 123456789 -a MD5 -A 12345678 10.0.0.105 '' '.1.3.6.1.4.1.54358' .1.3.6.1.4.1.54358.1.1.4.4.1.26 s "Sound off"
V3 inform
> snmptrap -Ci -v 3 -u bulo -l authPriv -x AES -X 123456789 -a MD5 -A 12345678 10.0.0.105 '' '.1.3.6.1.4.1.54358' .1.3.6.1.4.1.54358.1.1.4.4.1.26 s "Sound off"
Manager da ayarlıysa aşağıdaki inform bilgisi gelir.
Timeout olma durumunundaki şartları aynı şekilde ayarlayabiliriz. Yani ;
> snmptrap -Ci -v 3 -t 5 -r 2 -u bulo -l authPriv -x AES -X 123456789 -a MD5 -A 12345678 10.0.0.105 '' '.1.3.6.1.4.1.54358' .1.3.6.1.4.1.54358 s "Sound off"
şeklinde 5 sn timeout tan sonra 2 + 1 → 3 sefer inform gönderir. Bu değerler girilmezse 5 sefer inform gönderir.
V3 inform da sistem inform alabilmesi için manager tarafında ayar gerekir.
Manager Ayar
ID kendinden yazıyordu.
Trap e EngineID eklemek
The Security Engine ID
Several copies of a given username can exist within an SNMP installation, however only one copy can exist within the scope of any one Security Engine. So the group of five options shown above are always paired with a Security Engine ID. This is a numerical string represented in hex format. There are many long and varied methods for determining what value to use for a security engine ID and there is as yet no formal consensus. This document is not the place to examine the arguments, however in the setup you will need to choose a value to use as the Security Engine ID. This must match the receiver's Engine ID and Username's config grouping of options.
Link: https://www.microfocus.com/documentation/server-cobol/51/chaudt21.htm
#define ENGINEID_TYPE_IPV4 Â Â 1
#define ENGINEID_TYPE_IPV6 Â Â 2
#define ENGINEID_TYPE_MACADDR 3
#define ENGINEID_TYPE_TEXT Â Â 4
Aslında trap gonderirken istenirse engineID gönderilen komutun içerisine eklenir ve karşı tarafta
şeklinde kaydedince istenilen engineID ile data gönderilmiş olur.
Örnek:
> snmptrap -e 0x12345678901234 -v 3 -u emirali -l authPriv -x AES -X aesemirali -a MD5 -A md5emirali 10.0.0.105 '' '.1.3.6.1.4.1.54358' .1.3.6.1.4.1.54358 s "Sound off"
Görüldüğü üzere yukarıdaki komut gönderildiğinde aşağıdaki trap belirir. (EngineID sine dikkat ediniz.)
Trap gönderirken eğer engineID eklemezseniz
> nano /etc/snmp/snmpd.conf
komutu ile dosyanın içerisindeki engineIDType ile engineID nin MAC adresine göre ayarladığımızda elde edilme yöntem olan engineIDType 3
yaptığımızda,
snmptrap -v 3 -u emirali -l authPriv -x AES -X aesemirali -a MD5 -A md5emirali 10.0.0.105 '' '.1.3.6.1.4.1.54358' .1.3.6.1.4.1.54358 s "Sound off"
şeklinde gönderdiğimizde
snmptrap -e 0x80001F8880A8C84459A3B9BB5E-v 3 -u emirali -l authPriv -x AES -X aesemirali -a MD5 -A md5emirali 10.0.0.105 '' '.1.3.6.1.4.1.54358' .1.3.6.1.4.1.54358 s "Sound off"
ile aynıdır.
Tabiki istersek yine -e ile istediğimiz id yi yazıp karşı taraftan alma ayarı ona göre yapıldığında çalışma sorunu yaşanmaz.
EngineID yi bulmak
snmpget -v 2c -c public localhost .1.3.6.1.6.3.10.2.1.1.0
bu komut oldEngineID yi veriyor.
> snmpget -v 2c -c public 10.0.0.197 .1.3.6.1.6.3.10.2.1.1.0
iso.3.6.1.6.3.10.2.1.1.0 = Hex-STRING: 80 00 1F 88 03 02 81 E1 CA 0B C1
DeÄŸiÅŸik OID listeleri
AutoStart Sorunu için Çözüm
Sorun:
ilk açılışta node-red server açılamıyordu. Ben de sudo systemctl disable nodered.service
yapıp auto start ı kapattım ve terminalden >node-red yazarak çalıştırdığımda node-red possible EventEmitter memory leak detected. Use emitter.setMaxListeners() to increase limit
şeklinde bir hatadan dolayı açılmadığını gördüm. (Fakat >node-red ile bir müddet bekleyince açılıyor.)
Çözüm
Bunun üzerine araştırmalarım sonucu node ları manage pallete ten (node-red/admin den) update ettim. Bu sefer sqlite hatası verdi. Bunun için
> sudo npm install -g --unsafe-perm node-red //şart mı bilmiyorum
> cd ~/.node-red
> npm rebuild
yaptım. (https://flows.nodered.org/node/node-red-node-sqlite)
> sudo systemctl enable nodered.service
>nano /etc/systemd/system/nodered.service
ile "Environment="NODE_OPTIONS=--max-old-space-size=256" → 128 di 256 yaptım ve "Nice=50" → 10 du 50 yaptım.
Aşağıdaki komutlar da npm update için fakat bana faydası olup olmadığını bilmiyorum.
npm cache clean -f
npm install -g n
(sorunu çözerken denediklerim)
> sudo apt-get install npm
> npm update
> node-red-pi --max-old-space-size=256
sts 4 kutup mib dosyası
node-red service i auto start tan çıkartır
> systemctl disable nodered.service
Removed /etc/systemd/system/multi-user.target.wants/nodered.service.
( NEW ) UPS, STS SNMP AGENT
NODE-RED kullanmadan lightweight web server DESIGN
Links:
https://www.nginx.com/resources/wiki/modules/index.html (Nginx adons)
Python Web Development | Web Development Using Django
Orange pi ya da Raspberry pi de nginx kurmak ve php yi baÄŸlamak
Setting up an NGINX web server on a Raspberry Pi
NGINX (pronounced engine x) is a popular lightweight web server application you can install on the Raspberry Pi to allow it to serve web pages.
Like Apache, NGINX can serve HTML files over HTTP, and with additional modules can serve dynamic web pages using scripting languages such as PHP.
Refresh database of available packages
Ensure that the package manager has up-to-date information about which packages are available:
sudo apt update
You only need to do this occasionally, but it's the most likely solution if subsequent steps fail with messages like:
404 Not Found [IP: 93.93.128.193 80]
Install NGINX
First install the nginx
 package by typing the following command in to the Terminal:
> sudo apt install nginx
and start the server with:
sudo /etc/init.d/nginx start
Test the web server
By default, NGINX puts a test HTML file in the web folder. This default web page is served when you browse to http://localhost/
 on the Pi itself, or http://192.168.1.10
 (whatever the Pi's IP address is) from another computer on the network. To find the Pi's IP address, type hostname -I
 at the command line (or read more about finding your IP address).
Browse to the default web page either on the Pi or from another computer on the network and you should see the following:
Changing the default web page
NGINX defaults its web page location to /var/www/html
 on Raspberry Pi OS. Navigate to this folder and edit or replace index.nginx-debian.html as you like. You can confirm the default page location at /etc/nginx/sites-available
 on the line which starts with 'root', should you need to.
Additional - Install PHP
sudo apt install php-fpm
Enable PHP in NGINX
cd /etc/nginx
sudo nano sites-enabled/default
find the line
index index.html index.htm;
roughly around line 25 (Press CTRL + C
 in nano to see the current line number)
Add index.php
 after index
 to look like this:
index index.php index.html index.htm;
Scroll down until you find a section with the following content:
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
# location ~ \.php$ {
Edit by removing the #
 characters on the following lines:
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/var/run/php5-fpm.sock;
}
Burası açıldığında normaldeki php(php5-fpm.sock) versiyonundan başka versiyon görünüyor olabilir.
Bunu cd /var/run/php/ ile ls yaptığımızda görürüz. �uan için bende "php7.2-fpm.sock". Bu yüzden
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/var/run/php7.2-fpm.sock;
}
olarak deÄŸiÅŸtirl
It should look like this:
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
location ~ \.php$ {
include snippets/fastcgi-php.conf;
# With php-fpm (or other unix sockets):
fastcgi_pass unix:/var/run/php/php7.2-fpm.sock;
# With php-cgi (or other tcp sockets):
# fastcgi_pass 127.0.0.1:9000;
}
Reload the configuration file
sudo /etc/init.d/nginx reload
Yukarıdakilerle yaptığımda bazı sorunlar yüzünden php çalışmadı.
SEBEBÄ°:
> sudo nano /etc/nginxsites-enabled/default
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/var/run/php5-fpm.sock
;
}
ya da hangi versiyon yazıyorsa (bende 7.0 yazıyıordu.) onun yerine
ls /var/run/php/
php7.2-fpm.sock dosyasını gördüm.
Yani sonuçta;
> sudo nano /etc/nginxsites-enabled/default
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/var/run/php7.2-fpm.sock;
}
olmalı. Bunlara ek olarak
location ~ /\.ht {
deny all;
}
ları da açtım.
(https://www.digitalocean.com/community/tutorials/how-to-install-linux-nginx-mysql-php-lemp-stack-in-ubuntu-16-04)
Yine ek olarak;
> sudo nano /etc/php/7.2/fpm/php.ini
cgi.fix_pathinfo=0 yaptım.
> sudo systemctl restart php7.2-fpm
Test PHP
yedek aldımindex.nginx-debian.html
 to yedek_index.nginx-debian.html
:
> cd /var/www/html
> cp index.nginx-debian.html yedek_index.nginx-debian.html
Open index.php
 with a text editor:
> sudo nano index.php
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>www.yazilimkodlama.com</title>
</head>
<body>
<?php
echo "<table border='1' width='200px'>";
echo "<tr>";
echo "<th>Sayı</th>";
echo "<th>Karesi</th>";
echo "<th>Küpü</th>";
echo "</tr>";
for ($i=1;$i<=10;$i++){
echo "<tr>";
echo "<td>$i</td>";
echo "<td>",$i*$i,"</td>";
echo "<td>",$i*$i*$i,"</td>";
echo "</tr>";
}
echo "</table>";
?>
</body>
</html>
Çalıştı.
Udemy den php dersi aldım. Ona çalışıyorum. Link:
https://www.notion.so/PHP-Dersi-ea97e100c7664a2da9d17189bbc4c111
Yazılacak PHP kodlarda dosya açma ve kapama gibi işlemlerin yapılabilmesi için chown ile bazı komutların girilmesi lazım.
> cat /etc/passwd
ile kullanıcı listesinden bizim kullanacağımız olan www-data bulundu. (server apachi değil nginx)
> chown -R www-data:www-data /var/www/html/
> chmod -R 755 /var/www/html/
( https://stackoverflow.com/questions/47902954/shell-command-touch-not-working-in-php )
Server Kapatılıp otomatik Start pasif
> sudo systemctl stop nginx
> sudo systemctl disable nginx
Server ın durumunu ogrenmek için
> sudo systemctl status nginx
> sudo systemctl status nginx | grep 'running' | awk '{print $3}'
(running)
PHP vs JavaScript, backend(sunucu), frontend (istemci)
Link: https://www.hostinger.web.tr/rehberler/php-nedir/#:~:text=PHP
Programlama dilleri ya istemci tarafında (frontend), ya da sunucu tarafında (backend) çalışabilir.
İstemci tarafındaki scriptler web tarayıcıları tarafından işlenir. Tarayıcınız, yani istemci istemci taraflı scriptleri içeren bir sayfa isterse, sunucu tarayıcı için çalıştırılabilir olan kaynak kodları yollarak cevap verir.
Öte yandan sunucu taraflı programlama dili scriptlerin tarayıcılara yollamadan önce sunucularda çalıştırıldığı anlamına gelir. Yani kaynak konu yollamadan önce web sunucuları kodları sade bir HTML formatına dönüştürmeden önce işler(çözümler).
Bundan dolayı sunucu taraflı programlama web masterların kaynak kodlarını saklamalarına izin verirken istemci taraflı scriptler istemcinin kullanıcıları kolaylıkla görülebilir.
Artık programlama dillerinin temelini anladığınıza göre PHP nedir adlı esas sorumuza geri dönebiliriz.
PHP vs JavaScript
Daha önce de belirttiğimiz gibi PHP ile birçok şey yapabilirsiniz. Ancak PHP genellikle dinamik içerik oluşturmak için kullanılmaktadır.
Eğer JavaScript’e aşinaysanız JavaScript’in ayrıca statik bir sayfanın daha dinamik ve interaktif için kullanıldığını da bilirsiniz. Bu nedenden dolayı PHP ve JavaScript birbirine benzer fonksiyonlara sahip olan iki adet programlama dilidir.
Neden ikisine de ihtiyacımız var?
Konu bir dinamik web sitesi kurmaya geldiğinde tamamiyle JavaScript ile çalışan bir tane kurmak mümkündür. Ancak fonksiyonellik değişebilir.
JavaScript ile fare rollover efekti, otomatik doğrulama ve fotoğraf galerileri gibi basit etkileşimlere izin veren dinamik bir site yapabilirsiniz. Ancak sosyal ağlar ve eticaret (kullanıcı davranışına göre değişen web siteler) gibi kullanıcı katkılı içerikler yaratamaz. Bunu yapmak için PHP’ye ihtiyaç duyarsınız.
Diyelim ki bir sosyal ağa giriş yapıyorsunuz. Profilinizi görüntülemek için PHP veritabanınızdan veri alır ve tarayıcınıza sonuç yollar.
Profilinize her değişik yaptığınızda ilerideki veri alımları için PHP yeni bilgiyi depolayacaktır. Bütün bu işlem bir sosyal ağın farklı kullanıcılara farklı içerikleri görüntülemesine izin verir.
Bu yüzden JavaScript ve PHP rakip değillerdir. Hatta birlikte güzel bir dinamik web sitesi yapmak için kullanılabilirler.
Yardımcı linkler :
Web GeliÅŸtirmede PHP ve Python
stackoverflow.com How is memory management in PHP different from that in Python? sorusuna cevap:
Link:
PHP, hiper metin kodlama dili olarak tasarlanmıştır. Her süreç çok kısa bir süre sonra bitecek şekilde tasarlandı. Yani bellek yönetimi ve GC temelde önemli değildi. Bununla birlikte, PHP'nin kolaylığı ve popülaritesi, arka plan sunucuları, kapsamlı hesaplamalar, soket sunucuları vb. Gibi uzun ömürlü programlarda kullanılmasına neden olmuştur. PHP 5.3, onu bu tür uygulamalar için uygun hale getiren birçok özellik ve düzeltme getirmiştir, ancak benim görüşüme göre bellek yönetimi bu konuda daha az öneme sahipti. PHP hata yönetimi şu anda oldukça iyi, ancak bildiğim her programlama dilinde olduğu gibi bellek sızıntıları üretebilir. Hala Java veya Python uygulamalarını kodlayabileceğiniz tarzda kodlayamazsınız. Java / Python'un göstermediği birçok PHP programı muhtemelen ciddi sorunlar gösterecektir. Bunu "daha kötü" olarak nitelendirebilirsiniz, ama ben yapmam. PHP, farklı şekilde işlemeniz gereken farklı bir araç setidir. Çalıştığım şirket, büyüleyici bir şekilde çalışan PHP ile yazılmış birçok sistem programına ve artalan sürecine sahip. Siz "üretim düzeyinde uzun ömürlü uygulamaları" tanımlarken PHP için en büyük uyarı, çoklu işleme ve iş parçacığı oluşturma yeteneğidir (2'nci temelde yoktur). Elbette süreçleri çatallama, paylaşılan belleğe erişme, süreçler arası iletişim kurma ve mesaj kuyruklarına ve diğer şeylere sahip olma olasılığı vardır. Ancak Python bu konuda çok ileride çünkü aşağıdan yukarıya böyle işler için tasarlandı.
Quora Which is better, PHP or Python? Why? sorusuna cevap:
Cevap 1:
PYTHON
What are Python’s strengths?
- Vast array of built-in and 3rd party libraries/modules specifically for web development and server management (server management applies to web development too).
- Those 3rd party libraries are well designed, well maintained, easy to install and powerful.
- Ease of development. If you’ve ever programmed in Python, you know how easy it is.
- Django is very powerful. It helps replace JavaScript and PHP.
- [OPINION] Personally, I hate PHP and JavaScript. They’re frustrating to use and both are vulnerability prone. PHP more because of flaws in the language; JavaScript because of flaws in the weird-as-hell specification that lead to poor interpretations of how the JS engine should be implemented.
- Fully object oriented.
- Great for data manipulation and machine learning (can be important if you’re providing targeted advertising on your platform).
- With the right framework, and modules (included as standard), you can properly and nicely integrate with a database server and auto-generate queries for your site.
- e.g. If user is searching their account for a specific license key, the framework handles that by translating what the user’s doing into an SQL query.
- e.g. #2: If the admin is searching for a customer by email address, the framework will translate that into an SQL query, then translate the results back and display them in CSS-formatted HTML.
What are Python’s weaknesses?
- Slow. Like really slow. Slower than Python fanboys like to admit. As Oluwasegun said, PHP is up to 3x faster (sometimes more, sometimes less, depends).
- When you use it for development, you can’t really think of it like you’re using Python: You’re using a framework (e.g. Django). So learning Python isn’t enough, you have to learn the framework too.
- Python is nowhere near as widely used as PHP, so its employability factor, specifically in regards to web development, is much more limited. I heard a stat that ~80% of all websites use PHP - I can’t verify the stat, but it wouldn’t surprise me.
- This kind of goes hand-in-hand with slowness, but needs to be addressed separately: Resource use. Python hogs resources much more than PHP. You’d think, if it utilized so much of the available resources, that would actually maybe help to speed it up…… No, no it doesn’t.
- [Opinion] The OOP aspect of Python is abysmal. If you’ve ever done any OOP in a language like Java, C#, or C++, you’ll understand why I hate it. Any language that relies onÂ
this
 andÂsuper()
 hasn’t done it right. It makes you code look confusing as hell, obfuscates the whole process and makes the developer prone to errors. It’s just not necessary - the whole aspect of the language feels (as I think I’ve said elsewhere on this site) like it was bolted on, with a hammer, by a blind fish…. as an afterthought. And guess what? It was! Alright it wasn’t bolted on using a hammer, by a fish. But it was an afterthought and wasn’t initially intended to be part of the language (it wasn’t initially included).- It’s a poor and restrictive implementation of OOP. Again, Opinion. Some people like it, but they’re usually the ones that say C and C++ are difficult and confusing.
All in all, that’s not terrible right? Personally I think the biggest issue in the above is ‘market share’ in comparison to PHP, from an employability perspective anyway.
PHP
What are PHP’s strengths?
- Very fast.
- Fully object oriented.
- Used in a vast majority of back-end web-services and ‘behind the scenes’ functionality of websites.
- Integrates nicely with SQL servers and virtually all flavours of them.
- Auto-generates queries to the database (see Python section of example of what this means)
- Wonderfully diverse built-in functionality that is designed for web use.
- Lots of PHP web API’s available that further extend what can be done.
- Lots of these are designed specifically for use with PHP and cannot be used with Python & Django.
- e.g. Many e-Commerce API’s
- Lots of these are designed specifically for use with PHP and cannot be used with Python & Django.
What are PHP’s weaknesses?
Oh boy. There’s some real humdingers:
- [Opinion] The syntax is friggin awful. Yes, that is an opinion, but it’s a very widely shared opinion. Each and every single PHP programmer that I’ve ever spoken to has held this opinion too. If you’re not already familiar with it, check it out.
- SQL injection attacks. See the link below for a detailed explanation of what it is, why it happens and how to solve it using PHP:
- Remote Code Execution:
- A bug in a PHP application may accept user input and evaluate it as PHP code.
- Cross-Site Scripting (XSS [X = Cross]):
- Stored XSS and Reflected XSS
- Authentication Bypass - Technically a developer error, but the language itself makes it really, really easy to make this mistake.
- I could go on with more, but here’s a link instead:
- [Opinion] OOP is just as bad as in Python. Possibly worse due to the syntax. It still usesÂ
this
 (but it’s actuallyÂ$this
)
All in all, those vulnerabilities are pretty darned awful, but they’re mostly due to developer error. Get to know PHP well and research not just ‘How me do a PHP develop’, but “PHP development pitfalls� and “PHP vulnerabilities� then it won’t be such an issue.
All Together Now
So what’s the ultimate conclusion to be drawn here? Well, despite what die Python fans like to say, Python cannot fully replace PHP, due to the presence of common PHP-only API’s, and the industry dominance of PHP.
I know I’ve already gone on for ages, but this is my final point and it’s really important to state: The idea that developers should be picking a “one best language because it’s bestest� is a massive failure of both the modern education system, and junior [young] developers. In order to be truly proficient in any field of development, be web, app or software, you’ll need to know multiple languages. The same holds true to be reliably employable.
ANECDOTE:Â When I first started in the industry, I remember being highly impressed when I asked and the developers at work told me that they knew Assembly, C, C++, C#, JavaScript, binary, & hexadecimal.
I’m less impressed now because I know C, C++. some C# (learning more), JavaScript, Python, Java, HTML, CSS, some PHP (learning more), SQL, binary, hex… I feel like I’m missing some but can’t remember off the top of my head. They’re still much more experienced and proficient than I am, but I now understand that knowing lots of languages is just normal and is what needs to be done.
So in conclusion it’s not about which is better, it’s about understanding where and when to use them. And, for web development, the BARE MINIMUM you should learn are the following:
- HTML
- CSS
- JavaScript
- PHP
- JSON (replace XML)
- SQL (MySQL, Oracle, MS SQL are the 3 main) - beware of different ‘flavours’
- Python
The above are absolutely non-negotiable for a career. Optionally, learn Java too. It’s useful for web apps.
Edit:Â Proof of lack of bias? I hate Python and PHP both equally; as in, I actually genuinely dislike both of them.
Cevap 2:
Python VS PHP: which language you should opt for? The question is of the utmost importance for new developers and startups. The answer to this question is not as simple as both the languages are popular. They are used globally on the internet because of budgeting and other development issues.
Trouble faced by beginners while choosing between PHP and Python:
- For developers who are just starting their PHP web development deciding between the languages is difficult.
- Beginners find it hard to choose between the web development languages as they have different requirements.
- Also, they face two issues while dealing with any languages. One- they need to learn programming construct, and then learn how to implement them in the chosen language. Second- they require expertise in syntax which makes no sense to them.
- These issues faced by new developers are due to the biased advice they get from Python and PHP developers. If you talk to a python developer, they will list all the pros of the language and no cons. Same is the case with PHP developers they would insist that there is no better language.
So, how do you decide between the two languages? Well, to make things easy for you, we have listed four points in this blog for Python VS PHP comparison. After this, you will find it easy to decide between the two languages.
Before we move on to the three points, let’s look at some statistics regarding the use of both web development languages.
Points of comparison for Python VS PHP
1. Frameworks
A framework is a community that develops codes and maintains the compilation of code. It aids a developer in creating a web app quickly without making anything from scratch.
A framework gives numerous functions that developers can add as per their needs for adding functionality to the app.
Python frameworks are powerful and versatile but offer limited options. Python language offers a wide range of frameworks that basically performs the same function as for PHP. There is a continuous increase in the number of Python frameworks due to increased usages of the language in projects. Flask and Django are popular frameworks used by developers globally.
PHP frameworks are also huge in numbers offering developers with the option of creating industry-specific apps. The popular PHP frameworks are symfony and Laravel that are used by many popular apps which are used by millions of users.
2. CMS
A CMS is a software platform offering a versatile solution for app development projects. It offers a solution for blog, e-commerce and so on ensuring that developers can focus on the business case. The most popular CMS is WordPress that is built using PHP. Other popular CMS are Magento and WooCommerce, popular for e -commerce site development .They too are built using PHP.
Python has a CMS platform Django that has limited use.
PHP is a clear winner here as it a better CMS platform that is used by many users.
3. Popularity
Both the web development languages are popular, but currently, PHP dominates 80% of the market. PHP is used by many popular websites that include Yahoo, Wikipedia, Tumblr and so on. Facebook too used PHP initially before switching to PHP framework.
Python is one of the great choices of backend programming. And PHP has been in the market for a while now and still used for backend purposes.
Python language too is quite popular especially since Google chose it for some of its famous projects. Reddit, Pinterest, YouTube, Instagram, and Spotify are some platforms that use Python language.
In terms of popularity, both languages are giving stiff competition to each other. New projects are announced daily that uses the said languages.
4. Learning Curve
The learning curve in terms of programming languages means the fluency a developer has in the language’s syntax. It also implies the understanding the developer has for using tools to translate web design into functional code.
Python is the clear winner because it is easy for beginners to learn and understand. PHP is tough and has little room for mistakes thus making it not beginner-friendly.
Python has more room for mistakes, and the code doesn’t break due to small errors. It is exactly because of this reason that schools are teaching Python web language for the basics of programming.
PHP framework and experts are trying their best to make the language easy and more user-friendly.
Conclusion:
Python VS PHPÂ is a never-ending debate, but both languages offer many opportunities to developers for learning. With their ready to use syntax, tools, and functionalities both Python and PHP developers have a lot to work with.
It is recommended that you try both languages. You should opt for the one that suits your project and is easy to use. PHP is best suited for technical projects while Python is easy for new developers and startups.
- Vast array of built-in and 3rd party libraries/modules specifically for web development and server management (server management applies to web development too).
Sonuç olarak düşük bellekli bir sistem (max 128 mb) tasarımı yapacağım için PHP yi tercih edeceğim.
Python için framework ler
C# kullanarak cihazı ip tabanı farketmezsizin ağda bulan ve ip sini değiştirebilen programa ihtiyacımız var
Open source snmp library for c#
SNMP agent ı ağda bulma
Farklı methodlar mevcut cihazı bulmak için. IP tarayarak bulmak çok uzun bir method. Daha hızlı bir teknik olan teknik ise ARP ın çalışma mantığındaki iki cihazın birbiriyle haberleşmesi için kullanılan broadcast e bu ip kimin diye bir soru sorup cevap olarak MAC adresi alması olayının benzerini burada kullandık. ARP çalışma mantığı ile alakalı aşağıdaki linkten bilgi edinilebilir.
https://medium.com/@gokhansengun/bilgisayarlar-ağda-birbirlerini-nasıl-bulurlar-45824b166908
Yapılan çalışma mantığı ise cihaz belli aralıklarla broadcast e 161 portundan TESCOM-UPS ve MAC adresini gönderiyor.
Yapılan PC programı ağda UDP 161 portunu dinleyip TESCOM-UPS kelimesini bekliyor. Cihazı bulduğunda ip,mac gibi bilgilere edinmiş oluyor. Ağda bulunduktan sonra PC programı yine broadcast e 162 portundan ayarlanan ip verilerini gönderiyor.
Aynı şekilde cihaz da UDP 162 portunu dinliyor ve oradan gelecek veriye göre /etc/network/interfaces dosyasını değiştirip reboot yapıyor. Bu dinleme ve gonderme işlerini cihaz, node-red ile web server üzerinde yapılıyor.
Bunu yapan node-red kodu:
Aşağıdaki kod 07.01.2021 12:36 da yenilenip eklendi. Farkı ise PC programı start-to-send diye data gönderiyor. Ondan sonra ağa 20 sn boyunca 1sn aralıklarla broadcast üzerinden yayın yapıyor. Ondan sonra broadcast yayınını durduruyor.
PC tarafın C# kodu yazıldı fakat Hercules ile UDP dinlenip yine UDP den data gönderilebilir.
PC kodu: ( https://stackoverflow.com/questions/40616911/c-sharp-udp-broadcast-and-receive-example )
static void Main()
{
UdpClient Configuration = new UdpClient(new IPEndPoint(IPAddress.Parse(data.IPAddress), configuration.Port)); //set up the bind to the local IP address of my choosing
ConfigurationServer.EnableBroadcast = true;
Configuration.Connect(new IPEndpoint(IPAddress.Parse(data.BroadcastIP), configuration.Port);
Listen();
}
private void Listen()
{
Task.Run(async () =>
{
while (true)
{
var remoteIp = new IPEndPoint(IPAddress.Any, configuration.Port);
var data = await ConfigurationServer.ReceiveAsync();
// i would send based on what data i received here
int j = 32;
}
}
});
}
Aşağıdaki gönderme kodudur.
int PORT = 162;
UdpClient udpClient = new UdpClient();
udpClient.Client.Bind(new IPEndPoint(IPAddress.Any, PORT));
var from = new IPEndPoint(0, 0);
Task.Run(() =>
{
while (true)
{
var recvBuffer = udpClient.Receive(ref from);
Console.WriteLine(Encoding.UTF8.GetString(recvBuffer));
}
});
var data = Encoding.UTF8.GetBytes("ABCD");
udpClient.Send(data, data.Length, "255.255.255.255", PORT);
SD kartın sağlığı için yapılması gerekenlerden biri : swapping işlemini minimuma indirmek ya da kapatmak
Konu ile ilgili yazımı okuyabilirsin. gate.io login
Link: https://askubuntu.com/questions/440326/how-can-i-turn-off-swap-permanently
> swapoff - a
ile swapping işlemi durur. Fakat reboot ettiğinde tekrar aktif çalışır.
Bunun için;
> sudo nano /etc/sysctl.conf
edit: vm.swappiness=10 ya da 1 e kadar indirebilirsin. Bu çok mecbur durumda swapping yapmasını sağlar.
> cat /proc/swaps
ile o sırada ne kadar ramden ne kadar swap alanı kullanılmış onu gösterir.
Visual Studio Code kurulumu ve ssh üzerinden Orange pi üzerinde çalışma
Ä°nternetten indirip kuruyoruz.
ssh kurulumu için soldaki Extention butonundan ssh-fs yazıp yönergeleri takip edince hem ssh bağlantısı yapabiliyorsunuz hem de kodu visual studio code üzerinde yazıyorsunuz fakat save edince orange pi nin içerisine kaydedilmiş oluyor. Dolayısıyla kodunuzu hemen çalıştırabiliyorsunuz.
SNMP için C# ile ssh tan testçilere program hazırlama
links:
SshClient cSSH = new SshClient("192.168.10.144", 22, "root", "pacaritambo");
cSSH.Connect();
SshCommand x = cSSH.RunCommand("exec \"/var/lib/asterisk/bin/retrieve_conf\"");
cSSH.Disconnect();
cSSH.Dispose();
//using SSH.Net
Orange Pi Zero LTS de çalışan Armbian için cross-compile denemesi
- Orange pi içerisindeki toolchain e gore internetten indirip deneme
gcc -v ile hangi version toolchain kullandığını buldum.
root@TescomUPS:~# gcc -v
Using built-in specs.
COLLECT_GCC=gcc
COLLECT_LTO_WRAPPER=/usr/lib/gcc/arm-linux-gnueabihf/7/lto-wrapper
Target: arm-linux-gnueabihf
Configured with: ../src/configure -v --with-pkgversion='Ubuntu/Linaro 7.4.0-1ubuntu1~18.04.1' --with-bugurl=file:///usr/share/doc/gcc-7/README.Bugs --enable-languages=c,ada,c++,go,d,fortran,objc,obj-c++ --prefix=/usr --with-gcc-major-version-only --program-suffix=-7 --program-prefix=arm-linux-gnueabihf- --enable-shared --enable-linker-build-id --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --libdir=/usr/lib --enable-nls --with-sysroot=/ --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --with-default-libstdcxx-abi=new --enable-gnu-unique-object --disable-libitm --disable-libquadmath --disable-libquadmath-support --enable-plugin --enable-default-pie --with-system-zlib --with-target-system-zlib --enable-objc-gc=auto --enable-multiarch --enable-multilib --disable-sjlj-exceptions --with-arch=armv7-a --with-fpu=vfpv3-d16 --with-float=hard --with-mode=thumb --disable-werror --enable-multilib --enable-checking=release --build=arm-linux-gnueabihf --host=arm-linux-gnueabihf --target=arm-linux-gnueabihf
Thread model: posix
gcc version 7.4.0 (Ubuntu/Linaro 7.4.0-1ubuntu1~18.04.1)
Buradan indirdim fakat ilerleyemedim ve derleyemedim.
- arm-toolchain i pc ye kurdum ve onu kullanarak komut satırında derledim.
Bunun dışında aşağıdaki link ile bir cross-compiling denedim ve Orange pi zero üzerinde çalıştırdım.
root@TescomUPS:/opt# ./deneme
Hello world !
Fakat bunu Qt ile denediğimde olmuyor. Derliyor fakat orange pi zero üzerinde çalışmıyor.
Qt ile derlediğim kodun orange pi üzerinde çalıştırdığımdaki cevabı:
> ./HelloWorld
bash: ./HelloWorld: cannot execute binary file: Exec format error
Sitenin PDF i :
- Qt ile derlediğim kodu Orange Pi zero LTS içerisinde çalıştırdım.
Orange Pi Zero tarafında aşağıdaki komut ile qt kütüphanelerini yüklemiş oldum.
> sudo apt-get install qt5-default
Daha önce buildroot ile raspberry pi için hazırladığım qt cross-compiler ayarıyla çalıştırdım.
Ayrıca https://releases.linaro.org/components/toolchain/binaries/7.4-2019.02/arm-linux-gnueabihf/
linkinden gcc-linaro-7.4.1-2019.02-x86_64_arm-linux-gnueabihf.tar.xz indirdim fakat bununla da qt den ayarladığımda yine cross-compile olarak çalıştıramadım.
Olması gereken yöntemler
- Aslında doğru yöntem https://github.com/armbian/build linkten
apt-get -y install git
git clone https://github.com/armbian/build
cd build
./compile.sh
yapıp istediğin işletim sistemini seçerek derleme işlemi yapıp tüm işletim sistemini buradan yönetmekte fayda var. Fakat bunun için en kötü buradaki en düşük işletim sistemi olan ubuntu 18 olması gerekmektedir.
Yazılan örnek kod ve derlenemiş hali :
External SNMP için LED ayarlamaları
wiringOP adında bir kütüphane var.
https://github.com/zhaolei/WiringOP
For Orangepi Pi
git clone https://github.com/zhaolei/WiringOP.git -b h3
Installation
cd WiringOP
chmod +x ./build
sudo ./build
Examples : https://github.com/zhaolei/WiringOP/tree/h3/examples
#include <stdio.h>
#include <wiringPi.h>
// LED Pin - wiringPi pin 0 is BCM_GPIO 17.
#define LED 0
int main (void)
{
printf ("Raspberry Pi blink\n") ;
wiringPiSetup () ;
pinMode (LED, OUTPUT) ;
for (;;)
{
digitalWrite (LED, HIGH) ; // On
delay (500) ; // mS
digitalWrite (LED, LOW) ; // Off
delay (500) ;
}
return 0 ;
}
Derleme sırasında kütüphaneleri düzgün çağırmak önemlidir.
> gcc LedCntlDeneme.c -l wiringPi -l pthread -l sqlite3 -o LedCntlDeneme
Pinler ( https://pcminipro.ru/stati/primer-programmy-miganie-svetodiodom-cherez-gpio/ )
11.01.2021 tarihindeki kod
�emalar
>gpio readall ile komut satırında pinler görünüyor.
WEB SERVER TASARIMI
<script src="vendor/jquery/jquery.min.js"></script>
<script type="text/javascript">
function myFunction()
{
setInterval
(
function()
{
$(".deneme").load("deneme2.php?data=15");
} , 1000
);
}
</script>
<button onclick="myFunction()" >Try it</button>
deneme2.php
<?php
function getOneData($address)
{
$shm_id = shmop_open(0x1000, "w", 0666, 400);
$shared_memory_string = shmop_read($shm_id,0,400);
$shared_memory_array = array_slice(unpack('C*', "\0".$shared_memory_string), 1);
//print_r($shared_memory_array);
$countOfArray = count($shared_memory_array) / 2 - 1;
//echo "count: " . $countOfArray;
for ($i = 0; $i <= $countOfArray; $i++) {
$All_Data[$i] = ($shared_memory_array[($i<<1)+1] << 8) + $shared_memory_array[$i<<1];
}
//global $All_Data;
$data = $All_Data[$address];
return($data);
}
echo getOneData($_GET['data']);
?>
<script src="vendor/jquery/jquery.min.js"></script>
<script type="text/javascript">
$(document).ready(
function myFunction()
{
setInterval
(
function()
{
$(".deneme").load("deneme2.php?data=15");
} , 1000
);
});
</script>
PC programı bizim SNMP cihazını bulabilmesi için PHP tarafına iki fonksiyon yazıldı.
<?php
require 'header.php';
function udpSend()//broadcast e data gonderiyor.
{
$ip = "255.255.255.255";
$port = 50001;//161;
$str = "02:81:cd:61:4a:d0#TMONX-SNMP#255.255.255.0#10.0.0.254#10.0.0.1";
$sock = socket_create(AF_INET, SOCK_DGRAM, SOL_UDP);
socket_set_option($sock, SOL_SOCKET, SO_BROADCAST, 1);
socket_set_option($sock, SOL_SOCKET, SO_RCVTIMEO, array("sec"=>7, "usec"=>0));
socket_sendto($sock, $str, strlen($str), 0, $ip, $port);
/*
while(true) {
$ret = @socket_recvfrom($sock, $buf, 20, 0, $ip, $port);
if($ret === false) break;
echo "Messagge : < $buf > , $ip : $port <br>";
}
*/
socket_close($sock);
}
function udpRcv()//50002 portunu dinliyor
{
error_reporting(~E_WARNING);
if(!($sock = socket_create(AF_INET, SOCK_DGRAM, 0)))
{
$errorcode = socket_last_error();
$errormsg = socket_strerror($errorcode);
die("Couldn't create socket: [$errorcode] $errormsg \n");
}
echo "Socket created \n";
// Bind the source address
if( !socket_bind($sock, '0.0.0.0' , 50002) )
{
$errorcode = socket_last_error();
$errormsg = socket_strerror($errorcode);
die("Could not bind socket : [$errorcode] $errormsg \n");
}
echo "Socket bind OK \n";
while(1)
{
echo "Waiting for data ... \n";
//Receive some data
$r = socket_recvfrom($sock, $buf, 512, 0, $remote_ip, $remote_port);
echo "$remote_ip : $remote_port -- " . $buf;
//Send back the data to the client
//socket_sendto($sock, "OK " . $buf , 100 , 0 , $remote_ip , $remote_port);
if( $buf == "start-to-send" )
{
udpSend();//broadcast e data gonderiyor.
break;
}
}
socket_close($sock);
}
udpRcv();
?>
Yukarıdaki işlem php içerisinde düzgün çalışıyordu. Fakat iptal ettim çünkü web ile bağımlılıklar olmasın istedim. O yüzden c kodu ile aşağıdaki kodu çalıştırdım. (https://www.programmersought.com/article/59644473996/)
/*
Simple udp server
*/
#include<stdio.h> //printf
#include<string.h> //memset
#include<stdlib.h> //exit(0);
#include<arpa/inet.h>
#include<sys/socket.h>
#define BUFLEN 512 //Max length of buffer
#define PORT 162 //The port on which to listen for incoming data
int broadCast();
void die(char *s);
void die(char *s)
{
perror(s);
exit(1);
}
int broadCast()
{
struct sockaddr_in b_addr;
char *str = "02:81:cd:61:4a:d0#TMONX-SNMP#255.255.255.0#10.0.0.254#10.0.0.1";
int socked=socket(AF_INET,SOCK_DGRAM,0);
if(socked<0)
{
perror("sock failed");
return 1;
}
int yes=1;
if(setsockopt(socked,SOL_SOCKET,SO_BROADCAST,&yes,sizeof(yes))<0)
{
perror("setsockopt failed\n");
return 2;
}
b_addr.sin_family=AF_INET;
b_addr.sin_addr.s_addr=inet_addr("255.255.255.255");
b_addr.sin_port=htons(atoi("161"));
int b_addr_len=sizeof(b_addr);
int send_len=0;
char buf[512];
memset(buf,'\0',512);
stpcpy(buf,"This is a broadcase UDP!");
//send_len = sendto(socked, buf, strlen(buf), 0,(struct sockaddr *)&b_addr, b_addr_len);
send_len = sendto(socked, (const char *)str, strlen(str), MSG_CONFIRM ,(struct sockaddr *)&b_addr, b_addr_len);
if (send_len < 0) {
printf("\n\rsend error.\n\r");
exit(EXIT_FAILURE);
}
printf("send success %d.\n\r",send_len);
close(send_len);
}
int main(void)
{
struct sockaddr_in si_me, si_other;
int s, i, slen = sizeof(si_other) , recv_len;
char buf[BUFLEN];
char *hello = "Hello from server";
//create a UDP socket
if ((s=socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP)) == -1)
{
die("socket");
}
// zero out the structure
memset((char *) &si_me, 0, sizeof(si_me));
si_me.sin_family = AF_INET;
si_me.sin_port = htons(PORT);
si_me.sin_addr.s_addr = htonl(INADDR_ANY);
//bind socket to port
if( bind(s , (struct sockaddr*)&si_me, sizeof(si_me) ) == -1)
{
die("bind");
}
//keep listening for data
while(1)
{
printf("Waiting for data...");
fflush(stdout);
//try to receive some data, this is a blocking call
if ((recv_len = recvfrom(s, buf, BUFLEN, 0, (struct sockaddr *) &si_other, &slen)) == -1)
{
die("recvfrom()");
}
//print details of the client/peer and the data received
printf("Received packet from %s:%d\n", inet_ntoa(si_other.sin_addr), ntohs(si_other.sin_port));
printf("Data: %s\n" , buf);
//now reply the client with the same data
// if (sendto(s, (const char *)hello, strlen(hello), MSG_CONFIRM, (struct sockaddr*) &si_other, slen) == -1)
// {
// die("sendto()");
// }
broadCast();
}
close(s);
return 0;
}
Aşağıdaki deneme Hercules ekranıdır. Normalde PC programı ile de denendi. Burada Broadcast e data gonderemediğim için 10.0.0.196 ile cihaz ip sini yazdım. Fakat PC programı broadcast e data gonderecektir.
UPS için SNMP PCB slot connetor Örnekleri
Soketler
Kart slot plastikleri
Build an Event Calendar with PHP using jQuery, Ajax, and MySQL
Source Code:https://www.codexworld.com/build-event-calendar-using-jquery-ajax-php/
Satılan Calender kodları:
Çalıştığım takvim kodunun kaynağı:
<?php
$monthNames = Array("Ocak", "Subat", "Mart", "Nisan", "Mayis", "Haziran", "Temmuz", "Agustos", "Eylul", "Ekim", "Kasim", "Aralik");
?>
<?php
if (!isset($_REQUEST["month"])) $_REQUEST["month"] = date("n");
if (!isset($_REQUEST["year"])) $_REQUEST["year"] = date("Y");
?>
<?php
$cMonth = $_REQUEST["month"];
$cYear = $_REQUEST["year"];
$prev_year = $cYear;
$next_year = $cYear;
$prev_month = $cMonth-1;
$next_month = $cMonth+1;
if ($prev_month == 0 ) {
$prev_month = 12;
$prev_year = $cYear - 1;
}
if ($next_month == 13 ) {
$next_month = 1;
$next_year = $cYear + 1;
}
?>
<table width="200">
<tr align="center">
<td bgcolor="#999999" style="color:#FFFFFF">
<table width="100%" border="0" cellspacing="0" cellpadding="0">
<tr>
<td width="50%" align="left"> <a href="<?php echo $_SERVER["PHP_SELF"] . "?month=". $prev_month . "&year=" . $prev_year; ?>" style="color:#FFFFFF">Geri</a></td>
<td width="50%" align="right"><a href="<?php echo $_SERVER["PHP_SELF"] . "?month=". $next_month . "&year=" . $next_year; ?>" style="color:#FFFFFF">Ileri</a> </td>
</tr>
</table>
</td>
</tr>
<tr>
<td align="center">
<table width="100%" border="0" cellpadding="2" cellspacing="2">
<tr align="center">
<td colspan="7" bgcolor="#999999" style="color:#FFFFFF"><strong><?php echo $monthNames[$cMonth-1].' '.$cYear; ?></strong></td>
</tr>
<tr>
<td align="center" bgcolor="#999999" style="color:#FFFFFF"><strong>S</strong></td>
<td align="center" bgcolor="#999999" style="color:#FFFFFF"><strong>M</strong></td>
<td align="center" bgcolor="#999999" style="color:#FFFFFF"><strong>T</strong></td>
<td align="center" bgcolor="#999999" style="color:#FFFFFF"><strong>W</strong></td>
<td align="center" bgcolor="#999999" style="color:#FFFFFF"><strong>T</strong></td>
<td align="center" bgcolor="#999999" style="color:#FFFFFF"><strong>F</strong></td>
<td align="center" bgcolor="#999999" style="color:#FFFFFF"><strong>S</strong></td>
</tr>
<?php
$timestamp = mktime(0,0,0,$cMonth,1,$cYear);
$maxday = date("t",$timestamp);
$thismonth = getdate ($timestamp);
$startday = $thismonth['wday'];
for ($i=0; $i<($maxday+$startday); $i++) {
if(($i % 7) == 0 ) echo "<tr>\n";
if($i < $startday) echo "<td></td>\n";
else echo "<td align='center' valign='middle' height='20px'>". ($i - $startday + 1) . "</td>\n";
if(($i % 7) == 6 ) echo "</tr>\n";
}
?>
</table>
</td>
</tr>
</table>
(Kaynak :https://www.r10.net/php/288515-php-sitenize-takvim.html )
467471021