VirtualHost *>
ServerAdmin email@somedomain.com
ServerName somedomain.net
ServerAlias www.somedomain.net
Redirect permanent / http://www.somedomain.com/
/VirtualHost>
Wednesday, May 19, 2010
Thursday, May 13, 2010
PHP Sockets Loop
$i=0;
$jsonPing = "{\"c\":\"ping\",\"d\":{}}\0";
while (1) {
$i++;
if($i == 1000) {
fwrite($socket,$jsonPing);
$i=0;
}
$data = "";
$data .= @fread($socket, 4096);
$data = str_replace("\x1f", " ", $data);
$data = str_replace("part", " part", $data);
$data = str_replace("join", " join", $data);
$data = str_replace("said", " said: ", $data);
$data = trim($data);
$jsonData = json_decode($data,true);
if ($jsonData['from'] == "ayt") {
$data="";
flush();
}else{
if( ($jsonData['u']) && ($jsonData['t']) && (strpos($data, "said")) ) {
echo $jsonData['u']." : ".str_replace($jsonData['u'], "", $jsonData['t'])."
\n";
flush();
ob_flush(); }
}}
fclose($socket);
$jsonPing = "{\"c\":\"ping\",\"d\":{}}\0";
while (1) {
$i++;
if($i == 1000) {
fwrite($socket,$jsonPing);
$i=0;
}
$data = "";
$data .= @fread($socket, 4096);
$data = str_replace("\x1f", " ", $data);
$data = str_replace("part", " part", $data);
$data = str_replace("join", " join", $data);
$data = str_replace("said", " said: ", $data);
$data = trim($data);
$jsonData = json_decode($data,true);
if ($jsonData['from'] == "ayt") {
$data="";
flush();
}else{
if( ($jsonData['u']) && ($jsonData['t']) && (strpos($data, "said")) ) {
echo $jsonData['u']." : ".str_replace($jsonData['u'], "", $jsonData['t'])."
\n";
flush();
ob_flush(); }
}}
fclose($socket);
Monday, May 10, 2010
Check to see which server is which (XML output)
header("Content-type: text/xml");
$getBeta = `/usr/bin/dig beta.sampledomain.com A +short`;
$getBeta = trim($getBeta);
$amIBeta = $_SERVER[SERVER_ADDR];
$amIBeta = trim($amIBeta);
if ($getBeta == $amIBeta) {
$IAmBeta = "true";
}else{
$IAmBeta = "false"; }
$getBeta = `/usr/bin/dig beta.sampledomain.com A +short`;
$getBeta = trim($getBeta);
$amIBeta = $_SERVER[SERVER_ADDR];
$amIBeta = trim($amIBeta);
if ($getBeta == $amIBeta) {
$IAmBeta = "true";
}else{
$IAmBeta = "false"; }
header.php
Quick header file to use include or require with in PHP:
$mysql_user="mysqluser";
$mysql_host="mysql.sample.com";
$mysql_db="mydb";
$mysql_pass = "mysqlpassword";
mysql_connect($mysql_host,$mysql_user,$mysql_pass);
@mysql_select_db($mysql_db) or die("Unable to connect to database...");
foreach ($_REQUEST as $key => $value) {
$_REQUEST[$key] = mysql_real_escape_string($value);
}
$mysql_user="mysqluser";
$mysql_host="mysql.sample.com";
$mysql_db="mydb";
$mysql_pass = "mysqlpassword";
mysql_connect($mysql_host,$mysql_user,$mysql_pass);
@mysql_select_db($mysql_db) or die("Unable to connect to database...");
foreach ($_REQUEST as $key => $value) {
$_REQUEST[$key] = mysql_real_escape_string($value);
}
Thursday, May 6, 2010
XInetD config
Just a quickie so I don't have to go dig it up again...
insert a new file under /etc/xinetd.d/ (under Ubuntu, anyway):
# default: on
# description: xinetd service to emulate Flash Remoting banner
#
service dummy
{
disable = no
type = UNLISTED
id = dummy
socket_type = stream
protocol = tcp
user = root
server = /usr/local/bin/dumbdumbdumbdumbdumb
wait = no
port = 843
}
contents of /usr/local/bin/dumbdumbdumbdumbdumb:
#!/bin/bash
echo "Oh, fiddlesticks..."
exit 0
Make sure /usr/local/bin/dumbdumbdumbdumbdumb is +x
insert a new file under /etc/xinetd.d/ (under Ubuntu, anyway):
# default: on
# description: xinetd service to emulate Flash Remoting banner
#
service dummy
{
disable = no
type = UNLISTED
id = dummy
socket_type = stream
protocol = tcp
user = root
server = /usr/local/bin/dumbdumbdumbdumbdumb
wait = no
port = 843
}
contents of /usr/local/bin/dumbdumbdumbdumbdumb:
#!/bin/bash
echo "Oh, fiddlesticks..."
exit 0
Make sure /usr/local/bin/dumbdumbdumbdumbdumb is +x
Tomcat setup to only listen on localhost (for use with Apache Mod_Proxy)
server.xml changes:
< Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443"
address="127.0.0.1"/ >
Note the "address" section....
< Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443"
address="127.0.0.1"/ >
Note the "address" section....
httpd.conf for mod_auth_mysql
Auth_MySQL_Info MySQL.Server username password
Auth_MySQL_General_DB DB with auth info
Auth_MySQL_General_DB DB with auth info
Getting Mod_Proxy to bounce to Tomcat (FINALLY)
This particular problem has been plaguing me for months. How to make HTTPD proxy to a Tomcat instance. Finally got it figured out. BONUS: Also configured it to authenticate via MySQL before proxying the connection. This is using a self-signed SSL cert.
NameVirtualHost zookeeper.mydomain.com:443
< VirtualHost zookeeper.mydomain.com:443 >
ServerAdmin gene@mydomain.com
SSLEngine On
SSLOptions +FakeBasicAuth +ExportCertData +StrictRequire
SSLCertificateFile /etc/apache2/ssl/server.crt
SSLCertificateKeyFile /etc/apache2/ssl/server.key
ProxyRequests Off
ProxyPreserveHost On
< Proxy * >
Order deny,allow
Allow from all
< /Proxy >
ProxyPass / http://127.0.0.1:8080/
ProxyPassReverse / http://127.0.0.1:8080/
< Location >
AuthName "Level 4 Staff Tools Login"
AuthType Basic
AuthUserFile /dev/null
AuthBasicAuthoritative Off
Auth_MySQL On
Auth_MySQL_Password_Table users
Auth_Mysql_Group_Table staffGroups
Auth_MySQL_Username_Field userName
Auth_MySQL_Password_Field password
Auth_MySQL_Group_Field groups
Auth_MySQL_Empty_Passwords Off
Auth_MySQL_Encryption_Types Plaintext Crypt_DES MySQL
require group engineering art
# Order allow,deny
# Allow from all
< /Location >
ErrorLog /var/log/apache2/error.log
NameVirtualHost zookeeper.mydomain.com:443
< VirtualHost zookeeper.mydomain.com:443 >
ServerAdmin gene@mydomain.com
SSLEngine On
SSLOptions +FakeBasicAuth +ExportCertData +StrictRequire
SSLCertificateFile /etc/apache2/ssl/server.crt
SSLCertificateKeyFile /etc/apache2/ssl/server.key
ProxyRequests Off
ProxyPreserveHost On
< Proxy * >
Order deny,allow
Allow from all
< /Proxy >
ProxyPass / http://127.0.0.1:8080/
ProxyPassReverse / http://127.0.0.1:8080/
< Location >
AuthName "Level 4 Staff Tools Login"
AuthType Basic
AuthUserFile /dev/null
AuthBasicAuthoritative Off
Auth_MySQL On
Auth_MySQL_Password_Table users
Auth_Mysql_Group_Table staffGroups
Auth_MySQL_Username_Field userName
Auth_MySQL_Password_Field password
Auth_MySQL_Group_Field groups
Auth_MySQL_Empty_Passwords Off
Auth_MySQL_Encryption_Types Plaintext Crypt_DES MySQL
require group engineering art
# Order allow,deny
# Allow from all
< /Location >
ErrorLog /var/log/apache2/error.log
Wednesday, May 5, 2010
Post Vars as an Array
$result_storeList=mysql_query('SELECT * FROM stores');
while($arrayStoreName=mysql_fetch_array($result_storeList)) {
echo "".$arrayStoreName['name']."(put html checkbox here with $arrayStoreName['ID']).(other HTML here)\n";
}
Submit that to:
$getStore = "SELECT * from stores";
$getStoreQuery = mysql_query($getStore);
while($getStoreArray = mysql_fetch_array($getStoreQuery)) {
$totalStoreNum = $getStoreArray['ID'];
if(htmlspecialchars($_POST[$getStoreArray['ID']])) {
$storeChoice = $getStoreArray['ID'];
$sql_Query = "INSERT INTO storeItems (storeID,itemID) VALUES ('".$storeChoice."','".$recordID."')";
mysql_query($sql_Query); }
}
while($arrayStoreName=mysql_fetch_array($result_storeList)) {
echo "".$arrayStoreName['name']."(put html checkbox here with $arrayStoreName['ID']).(other HTML here)\n";
}
Submit that to:
$getStore = "SELECT * from stores";
$getStoreQuery = mysql_query($getStore);
while($getStoreArray = mysql_fetch_array($getStoreQuery)) {
$totalStoreNum = $getStoreArray['ID'];
if(htmlspecialchars($_POST[$getStoreArray['ID']])) {
$storeChoice = $getStoreArray['ID'];
$sql_Query = "INSERT INTO storeItems (storeID,itemID) VALUES ('".$storeChoice."','".$recordID."')";
mysql_query($sql_Query); }
}
File Uploading
// Where the file is going to be placed
$target_path = "/tmp/";
/* Add the original filename to our target path.
Result is "uploads/filename.extension" */
$target_path = $target_path . basename( $_FILES['itemUpload']['name']);
if(move_uploaded_file($_FILES['itemUpload']['tmp_name'], $target_path)) {
echo "The file ". basename( $_FILES['itemUpload']['name']).
" has been uploaded
\n";
} else{
echo "There was an error uploading the file, please try again!";
}
$localFile = "/tmp/".basename( $_FILES['itemUpload']['name']);
$remoteFile = "/var/www/push/".basename( $_FILES['itemUpload']['name']);
$scp_connection = ssh2_connect('remotehost',22);
ssh2_auth_password($scp_connection, 'username', 'password');
ssh2_scp_send($scp_connection, $localFile, $remoteFile , 0664);
Upload a file via HTTP, then SCP it to another server. Been using the hell out of this so I can "sanitize" what files get uploaded to the production server (and force them to push it to Dev first).
$target_path = "/tmp/";
/* Add the original filename to our target path.
Result is "uploads/filename.extension" */
$target_path = $target_path . basename( $_FILES['itemUpload']['name']);
if(move_uploaded_file($_FILES['itemUpload']['tmp_name'], $target_path)) {
echo "The file ". basename( $_FILES['itemUpload']['name']).
" has been uploaded
\n";
} else{
echo "There was an error uploading the file, please try again!";
}
$localFile = "/tmp/".basename( $_FILES['itemUpload']['name']);
$remoteFile = "/var/www/push/".basename( $_FILES['itemUpload']['name']);
$scp_connection = ssh2_connect('remotehost',22);
ssh2_auth_password($scp_connection, 'username', 'password');
ssh2_scp_send($scp_connection, $localFile, $remoteFile , 0664);
Upload a file via HTTP, then SCP it to another server. Been using the hell out of this so I can "sanitize" what files get uploaded to the production server (and force them to push it to Dev first).
Wednesday, April 28, 2010
PHP Authentication Vars
Just a quick one for me to remember:
$_SERVER['PHP_AUTH_USER']
$_SERVER['PHP_AUTH_PW']
Get current auth info. Going to be using this in later code.
$_SERVER['PHP_AUTH_USER']
$_SERVER['PHP_AUTH_PW']
Get current auth info. Going to be using this in later code.
PHP and JSON
PHP's json_decode function works well, unless, of course, you get the JSON from a socket server and forget to trim it. This kicked my butt for a while yesterday.
Another important one to remember is var_dump (which kept showing up as NULL with json_decode before I started trimming the input).
Another important one to remember is var_dump (which kept showing up as NULL with json_decode before I started trimming the input).
Monday, April 19, 2010
Something to do with a PHP Directory Listing (Make it an HTML Option on another server)
$fp = fopen('http://whereever/whoever.php','r');
$content = '';
while($line = fgets($fp,4096)) {
$content = $line;
echo "\n".$content."\n\n"; }
$content = '';
while($line = fgets($fp,4096)) {
$content = $line;
echo "\n".$content."\n\n"; }
Quickie PHP Directory Listing
$path = ".";
$dir_handle = @opendir($path) or die("Cannot open directory");
while ($file = readdir($dir_handle)) {
if (($file == ".") || ($file == "..") || ($file == "dropdown.php") || ($file == ".svn") || ($file == "old")) {
}else{
echo $file."\n"; }
}
$dir_handle = @opendir($path) or die("Cannot open directory");
while ($file = readdir($dir_handle)) {
if (($file == ".") || ($file == "..") || ($file == "dropdown.php") || ($file == ".svn") || ($file == "old")) {
}else{
echo $file."\n"; }
}
Thursday, April 8, 2010
Quickie PHP Socket connection
$config = array(
'server' => 'serverName',
'port' => 'portNo' );
$socket = fsockopen($config['server'], $config['port'], $errno, $errstr);
if(!$socket) {
die("Error on page: ".$errno." ".$errstr); }
//uncomment below if stream blocking is needed.
//stream_set_blocking($socket, 1);
$data .= fread($socket, 4096);
echo $data."\n";
fclose($socket);
'server' => 'serverName',
'port' => 'portNo' );
$socket = fsockopen($config['server'], $config['port'], $errno, $errstr);
if(!$socket) {
die("Error on page: ".$errno." ".$errstr); }
//uncomment below if stream blocking is needed.
//stream_set_blocking($socket, 1);
$data .= fread($socket, 4096);
echo $data."\n";
fclose($socket);
Tuesday, April 6, 2010
Apache MySQL Auth
.htaccess File:
AuthName "Title of Auth Popup"
AuthType Basic
AuthUserFile /dev/null
AuthBasicAuthoritative Off
Auth_MySQL On
Auth_MySQL_Password_Table userTable
Auth_Mysql_Group_Table userGroups
Auth_MySQL_Username_Field userName
Auth_MySQL_Password_Field password
Auth_MySQL_Group_Field groups
Auth_MySQL_Empty_Passwords Off
Auth_MySQL_Encryption_Types Plaintext Crypt_DES MySQL
require group groupName(s)
AuthName "Title of Auth Popup"
AuthType Basic
AuthUserFile /dev/null
AuthBasicAuthoritative Off
Auth_MySQL On
Auth_MySQL_Password_Table userTable
Auth_Mysql_Group_Table userGroups
Auth_MySQL_Username_Field userName
Auth_MySQL_Password_Field password
Auth_MySQL_Group_Field groups
Auth_MySQL_Empty_Passwords Off
Auth_MySQL_Encryption_Types Plaintext Crypt_DES MySQL
require group groupName(s)
Just a MySQL statement I need to remember
select count(distinct userName) from userTracking where timeStamp >= '2010-03-30' AND status LIKE '%Logged into $%';
counts unique userNames from userTracking between March 30th 2010 and now and looks for "Logged into $" in the status field.
and even better:
SELECT COUNT(DISTINCT userName) FROM userTracking WHERE timeStamp >= DATE(NOW()) - INTERVAL 11 DAY + INTERVAL 10 HOUR AND timeStamp <= DATE(NOW()) - INTERVAL 0 DAY + INTERVAL 10 HOUR AND status LIKE '%Logged into $%';
between 11 days ago at 10am and today at 10am.
counts unique userNames from userTracking between March 30th 2010 and now and looks for "Logged into $" in the status field.
and even better:
SELECT COUNT(DISTINCT userName) FROM userTracking WHERE timeStamp >= DATE(NOW()) - INTERVAL 11 DAY + INTERVAL 10 HOUR AND timeStamp <= DATE(NOW()) - INTERVAL 0 DAY + INTERVAL 10 HOUR AND status LIKE '%Logged into $%';
between 11 days ago at 10am and today at 10am.
Delete MySQL Records Older Than *BLAH*
DELETE FROM tableName WHERE columnName < DATE_SUB(NOW(), INTERVAL 14 DAY);
DAY
WEEK
MONTH
etc.
Thanks to:
http://benperove.com/
DAY
WEEK
MONTH
etc.
Thanks to:
http://benperove.com/
Monday, April 5, 2010
My Reason to Despise Java
I understand it's a great language. Portable, (supposedly) easy to write. Also takes up a TON of file handlers on Linux. Quick fix below:
/etc/pam.d/common-session
ADD: session required pam_limits.so
/etc/sysctl.conf
ADD: fs.file-max = 1137875
then RUN: sysctl -p
/etc/security/limits.conf
ADD:
* soft nofile 131070
* hard nofile 131070
* soft nproc 25000
* hard nproc 65000
(This is for Ubuntu, and MY settings....yours may be different).
/etc/pam.d/common-session
ADD: session required pam_limits.so
/etc/sysctl.conf
ADD: fs.file-max = 1137875
then RUN: sysctl -p
/etc/security/limits.conf
ADD:
* soft nofile 131070
* hard nofile 131070
* soft nproc 25000
* hard nproc 65000
(This is for Ubuntu, and MY settings....yours may be different).
Friday, April 2, 2010
PHP Code for XML
At my current job I'm writing a lot of PHP scripts to take the load off of our programmers and pass that load to our art dept. Much of the data gets passed as static XML files, which I'm converting to dynamic XML from MySQL via PHP, using the following code:
?php
//The big one to make PHP spit it out as XML
header("Content-type: text/xml");
$mysql_user="dbUser";
$mysql_pass="dbPass";
$mysql_host="dbHost";
$mysql_db="dbDB";
mysql_connect($mysql_host,$mysql_user,$mysql_pass);
mysql_select_db($mysql_db);
$sql_query="SELECT * FROM configTable";
$sql_result=mysql_query($sql_query);
Not the cleanest code, I know, but it works.
?php
//The big one to make PHP spit it out as XML
header("Content-type: text/xml");
$mysql_user="dbUser";
$mysql_pass="dbPass";
$mysql_host="dbHost";
$mysql_db="dbDB";
mysql_connect($mysql_host,$mysql_user,$mysql_pass);
mysql_select_db($mysql_db);
$sql_query="SELECT * FROM configTable";
$sql_result=mysql_query($sql_query);
Not the cleanest code, I know, but it works.
FIRST POST!!!!
This blog is essentially a dumping ground for programming and thought snippets that I consider useful or entertaining. I want a central area that I can come to when I run into a problem I've solved before, but can't remember how I did it (easily done with 15+ years in tech). If you're reading these, I hope they help you as well.
Subscribe to:
Posts (Atom)