Pusher/Wrench on Ubuntu 12.04 with PHP - php

A site I am currently grabbing a lot of data from via API recently implemented Pusher to provide real-time updates. They then link to the page http://pusher.com/docs/client_libraries for client side libraries in several languages.
So the PHP client library linked to at http://pusher.com/docs/client_libraries appears to be bad.
First, the Git repo (via browser) doesn't download everything but once you get that figured out it still doesn't work. The basic flow is connect to Psher server with App key, then subscribe to one or more channels, then listen forever to those channels for updates.
The connect appears to work. The subscribe appears to work. The top level object from the PHP library leads to a recursion error (too deep) when I use var_export on it. Here's the resulting object after I subscribe to a channel:
Wrench\Payload\HybiPayload::__set_state(array( 'frames' => array ( 0 => Wrench\Frame\HybiFrame::__set_state(array( 'masked' => false, 'mask' => NULL, 'offset_payload' => 2, 'offset_mask' => 2, 'length' => 84, 'type' => NULL, 'buffer' => 'T{"event":"pusher:connection_established","data":"{\\"socket_id\\":\\"34937.7965561\\"}"}', 'payload' => '', )), ), ))
From there it waits for an update from the channel and when an update occurs I get the following:
Wrench\Payload\HybiPayload::__set_state(array( 'frames' => array ( 0 => Wrench\Frame\HybiFrame::__set_state(array( 'masked' => false, 'mask' => NULL, 'offset_payload' => 4, 'offset_mask' => 4, 'length' => 153, 'type' => NULL, 'buffer' => '~' . "\0" . '™{"event":"pusher:error","data":{"code":null,"message":"Pusher protocol versions <= 3 have been deprecated. Support will be removed after November 2013"}}', 'payload' => '', )), ), ))
and
array ( 0 => WrenchPusher\PusherMessage::__set_state(array( 'event' => 'pusher:connection_established', 'channel' => NULL, 'data' => stdClass::__set_state(array( 'socket_id' => '34937.7965561', )), )), 1
=> WrenchPusher\PusherMessage::__set_state(array( 'event' => 'connection_established', 'channel' => NULL, 'data' => stdClass::__set_state(array( 'socket_id' => '34937.7965561', )), )), 2
=> WrenchPusher\PusherMessage::__set_state(array( 'event' => 'pusher:error', 'channel' => NULL, 'data' => stdClass::__set_state(array( 'code' => NULL, 'message' => 'Pusher protocol versions <= 3 have been deprecated. Support will be removed after November 2013', )), )),
Now the obvious issue would be the part about version 3 not being supported. The script fails on a json_decode call which is expecting a string but is getting an object.
Despite several Google searches on the matter I have not been able to find an updated library.
Has anyone worked with a more up-to-date Pusher/Wrench PHP library? Any recommendations are welcome.
Thanks
Update 04/11/14:
Pusher support was kind enough to take 2 days to confirm that the library is in fact broken. And to tell me that they won't do anything about it. So if you want Pusher client in PHP you appear to be out of luck for now.
I also know Ruby and checked into that library. It also looked old but I didn't spend a lot of time looking into the details. After wasting my time on the broken PHP library I assumed the Ruby one was probably broken as well. Pusher seems to prefer javascript.

Related

Accessing a child node using JSON within PHP and file_get_contents()

OK I am stumped.
I have tried numerous different approaches and I've spent the best part of a good few hours searching to no avail to my exact situation, that or I am tired and blind.
Here is the raw json pulled from a URI using file_get_contents():
{"id":"XXX","name":"Customer1","os":"CentOS Linux 7.3.1611 Core","cpu_type":"Intel(R) Xeon(R) CPU E3-1245 V2 # 3.40GHz","networking_v4":[{"addr":"xxx.xxx.xxx.xxx","if":"eth0"}],"networking_v6":[{"addr":"xxxx","if":"eth0"},{"addr":"xxxx","if":"eth0"}],"agent_version":0.96,"status":"up","last_update":1505949230,"first_update":1500588943,"notifications_count":8,"ip_whois":{"ip":"xxx.xxx.xxx.xxx","hostname":"xxx","city":"Garwood","region":"New Jersey","country":"US","loc":"xxx","org":"AS20473 Choopa, LLC","postal":"xxx"},"additional_fields":[{"value":"xxx","key":"Datacenter"},{"value":"","key":""},{"value":"","key":""},{"value":"","key":""},{"value":"","key":""},{"value":"","key":""},{"value":"","key":""},{"value":"","key":""},{"value":"","key":""}]}
As you can see its a pretty simple request and I have every bit of data except those nested within networking_v4 and networking_v6.
I tried to access those like so:
'ipv4' => $json->networking_v4->addr,
'ipv4dev' => $json->networking_v4->if,
'ipv6' => $json->networking_v6->addr,
'ipv6dev' => $json->networking_v6->if,
Here is the full snapshot of code in its entirety:
$content = file_get_contents($url);
$json = json_decode($content);
$server_lastupd = $json->last_update;
$server_firstupd = $json->first_update;
$server = array(
'id' => $json->id,
'name' => $json->name,
'os' => $json->os,
'cputype' => $json->cpu_type,
'ipv4' => $json->networking_v4->addr,
'ipv4dev' => $json->networking_v4->if,
'ipv6' => $json->networking_v6->addr,
'ipv6dev' => $json->networking_v6->if,
'status' => $json->status,
'lastupd' => $json->$server_lastupd,
'firstupd' => $json->$server_firstupd,
'notifications' => $json->notifications_count,
'ip' => $json->ip_whois->ip,
'hostname' => $json->ip_whois->hostname,
'city' => $json->ip_whois->city,
'region' => $json->ip_whois->region,
'country' => $json->ip_whois->country,
'loc' => $json->ip_whois->loc,
'org' => $json->ip_whois->org,
'postal' => $json->ip_whois->postal,
'dctag' => $json->additonal_fields->dctag,
'source' => "XXX"
);
return $server;
So my issue is I appear to be unable to access the child content within networking_v4 and networking_v6.
Any help on this would be massively appreciated, its stumped me for the best part of 6 hours last night and a few more today, so I give in, someone please show me the light!
Many thanks :)
It looks like those are nested in arrays from the [{"key':"value"},{"key":"value"}] square brackets. have you tried
ipv4 => $json->networking_v4[0]->addr,
Try $json->networking_v4[0]->addr.
Both the networking_v4 and the networking_v6 keys point to arrays, so you need to pick which index you want to look at. The former only has one element, so it's easy to pick index 0, but the latter has multiple elements, so you'll need to figure out which one you want.

Get EC2 Bandwidth Usage By Instance ID

How do I get the instance bandwidth usage for NetworkIn and NetworkOut for an EC2 instance based on the instance ID using the PHP SDK.
So far what I have is...
<?php
require_once("../aws/Sdk.php");
use Aws\CloudWatch\CloudWatchClient;
$client = CloudWatchClient::factory(array(
'profile' => 'default',
'region' => 'ap-southeast-2'
));
$dimensions = array(
array('Name' => 'Prefix', 'Value' => ""),
);
$result = $client->getMetricStatistics(array(
'Namespace' => 'AWSSDKPHP',
'MetricName' => 'NetworkIn',
'Dimensions' => $dimensions,
'StartTime' => strtotime('-1 hour'),
'EndTime' => strtotime('now'),
'Period' => 3000,
'Statistics' => array('Maximum', 'Minimum'),
));
I have a PHP cron job running every hour and I need to be able to get the bandwidth in and out for a specific EC2 instance to record in an internal database.
What I have above I have been able to piece together from the SDK documentation but from here I am kinda stumped.
I believe what I need is cloudwatch so would rather it be able to be done through this. I know that I can install a small program onto each server to report the bandwidth usage to a file on the server that I then SFTP into to download to our database but would rather it be done externally of any settings within the instance itself so that an instance admin can't cause issues with the bandwidth reporting.
Managed to get it working with...
<?php
require '../../aws.phar';
use Aws\CloudWatch\CloudWatchClient;
$cw = CloudWatchClient::factory(array(
'key' => 'your-key-here',
'secret' => 'your-secret-here',
'region' => 'your-region-here',
'version' => 'latest'
));
$metrics = $cw->listMetrics(array('Namespace' => 'AWS/EC2'));
//print_r($metrics);
$statsyo = $cw->getMetricStatistics(array(
'Namespace' => 'AWS/EC2',
'MetricName' => 'NetworkIn',
'Dimensions' => array(array('Name' => 'InstanceId', 'Value' => 'your-instance-id-here')),
'StartTime' => strtotime("2017-01-23 00:00:00"),
'EndTime' => strtotime("2017-01-23 23:59:59"),
'Period' => 86400,
'Statistics' => array('Average'),
'Unit' => 'Bytes'
));
echo($statsyo);
If you're trying to calculate your bandwidth charge the same way AWS would, a better and more conclusive way would be to use VPC Flow Logs. You can subscribe your ENI to VPC flow logs (should be pretty cheap, they only charge for CloudWatch Logs costs, flow logs is free) then use the AWS SDK to pull from CloudWatch with GetLogEvents, and then sum up the bytes total.

Realurl generating non default language titles in the url of default tt_news links

I am using TYPO3 7.6.9, tt_news 7.6.1 and realurl 2.0.14 .
I've configured my realurl manually for my multi-language website. The problem is that, real url is generating non-default language titles for news items in the site at default view.
For instance, my default language is bosnian and alternate translation is english.
When I view the page like www.mysite.com/bs/article/news.. url is cool.
But when the url is www.mysite.com/article/news.. then the translation of news title is not shown. Instead english title is shown in url.
Already wrote every possible realurl_conf. :( But still pulling my hair out.
'postVarSets' => array (
'_DEFAULT' => array (
'article' => array(
'news' => array (
'GETvar' => 'tx_ttnews[tt_news]',
'lookUpTable' => array(
'table' => 'tt_news',
'id_field' => 'uid',
'alias_field' => 'title',
'addWhereClause' => ' AND NOT deleted AND NOT hidden',
'useUniqueCache' => 1,
'useUniqueCache_conf' => array(
'strtolower' => 1,
'spaceCharacter' => '-',
),
'expireDays' => 180,
'languageGetVar' => 'L',
'languageExceptionUids' => '',
'languageField' => 'sys_language_uid',
'transOrigPointerField' => 'l18n_parent',
// 'autoUpdate' => 1,
),
),
),
Typoscript is like below
# language configuration
page.config.linkVars = L
page.config.sys_language_uid = 30
page.config.language = bs
page.config.locale_all = bs_BA.utf8
# english language
[globalVar = GP:L = 0]
page.config.sys_language_uid = 0
page.config.language = en
page.config.locale_all = en_GB.utf8
page.config.htmlTag_langKey = en
[global]
I am aware that, during default view no 'L' parameter is passed and all. But with the shared realurl_conf it must be solved,right ??
I've tried valueDefault in vain.
Having no answer to my question yet, I've somehow managed to fix this issue. I know this is quite vague, but I fiiirmly believe the fix came from some typoscript defining the languages. Anyways t is cool now (at least for my website).
Next time you come across an issue like this, try checking your language related typoscript settings. Good Luck Amigos. Peace. :)

Someone remotely encrypted my original source

I was having a remote session with someone 2 days back for a web application demonstration, and suddenly, I don't know what he did, but my screen froze for 10 minutes and then when it got back to work, all my main original source files were encrypted.
I don't have any back up and it took so much to code all that files but now all my work has gone to waste. When I opened those files, it says "Encrypted by PHPMasterCrypt and when I visited that website, it says its one-way encryption and cannot be reverted back.
<?$__C44s='This program is encrypted by PHP MasterCrypt - phpMC v2.6.0. This encryption system has been developed by Subhash Bose. Visit http://programming.subhashbose.com/phpmc for using phpMC';$__v=1879;if(!function_exists('c___65gf')){function c___65gf($__44re,$__4bd7,$__hdh7){return substr($__44re.$__44re,$__4bd7%strlen($__44re),$__hdh7);}}$m__hes7j='==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';$s___g6='__';$__v++;$m__c7df2=create_function(base64_decode('JG5fX2hmNzQsJGxfMzQzag=='),base64_decode('cmV0dXJuIGNyZWF0ZV9mdW5jdGlvbigkbl9faGY3NCwkbF8zNDNqKTs='));$m__065a3=$m__c7df2(base64_decode('JGhfXzY0M2g='),base64_decode('cmV0dXJuIGJhc2U2NF9kZWNvZGUoc3RycmV2KCRoX182NDNoKSk7'));$__C44s=base64_encode($__C44s);$m__a3e35=${'m'.$s___g6.substr(md5(c___65gf($__C44s,$__v,23)),8,5)}($m__065a3('=kjMmJ2XfRGJ'),$m__065a3('=sTKpkjMmJ2XfRGJoYXZyJHdzhSZ0FGbm5Wa6dGIuJXd0Vmc'));eval(strrev(${'m'.$s___g6.substr(md5(c___65gf($__C44s,($__v*3)*$__v,23)),8,5)}(${'m'.$s___g6.substr(md5(c___65gf($__C44s,$__v*$__v,23)),8,5)}(str_replace(md5($__C44s.'MC'),'',$m__hes7j)))));?>
I believe I have retrieved your code through sheer stubbornness.
<?php
require('mysql_func.php');
//ONLINE [REDACTED]
define('GAPS_SERVER', 'localhost'); // eg, localhost
define('GAPS_SERVER_USERNAME', 'root');
define('GAPS_SERVER_PASSWORD', '[REDACTED]');
define('GAPS_DATABASE', 'edaddy_irinfotech');
define('SITE_URL','http://localhost/edaddy');
define('SITE_ADMIN_URL','http://localhost/edaddy');
define('SITE_NAME','E-Daddy');
define('SITE_PAGE_REGISTRECTED','<div style="text-align:center;color:#FF0000" class="alert"><strong style="color:#FF0000">You do not have access to this page.</strong></div>');
//****** Table's Name of database ***********///
$SQLDB = array(
'CRM_MENU' => 'crm_menu',
'CRM_USERS' => 'crm_users',
'CRM_MODULE' => 'crm_module',
'CRM_CUSTOMER' => 'crm_customer',
'CRM_DETAILS' => 'crm_detail',
'CRM_CASE' => 'crm_case',
'CRM_SUBCRIPTION_TYPE' => 'crm_subcription_type',
'CRM_OPERATING_SYSTEM' => 'crm_operating_system',
'CRM_SYSTEM_CONFIG' => 'crm_system_config',
'CRM_RAM' => 'crm_ram',
'CRM_HDD' => 'crm_hdd',
'CRM_VERIFICATION_QUESTION' => 'crm_verification_question',
'CRM_REGISTERED_COMPUTER' => 'crm_registered_computers',
'CRM_CURRENCY' => 'crm_currency',
'CRM_COUNTRIES' => 'crm_countries',
'CRM_ZONES' => 'crm_zones',
'CRM_CASE_STATUS' => 'crm_case_status',
'CRM_TEAM_MASTER' => 'crm_team_master',
'CRM_COMPONENTS' => 'crm_components',
'CRM_CUSTOMER_CASE_TEMP' => 'crm_customer_case_temp',
'CRM_CUSTOMER_CASE' => 'crm_customer_case',
'CRM_TIMEZONE' => 'crm_timezone',
'CRM_CUSTOMER_NOTES' => 'crm_customer_notes',
'CRM_CASE_EDITED_DATE' => 'crm_case_edited_date',
'CRM_BREAK_MASTER' => 'crm_break_master',
'CRM_USER_TIME_SLOT' => 'crm_user_time_slot',
'CRM_SETTINGS' => 'crm_settings',
'CRM_CALL_TYPE' => 'crm_call_type',
'CRM_CALL_MASTER' => 'crm_call_master',
'CRM_CUSTOMER_CALLING_DATE' => 'crm_customer_calling_date',
'CRM_CUSTOMER_REACTION' => 'crm_customer_reaction',
'CRM_USER_RIGHT_MASTER' => 'crm_user_right_master',
'CRM_USER_RIGHT_CUSTOMER' => 'crm_user_right_customer',
'CRM_INTERNAL_EMAIL' => 'crm_internal_email',
'CRM_INTERNAL_EMAIL_USERS' => 'crm_internal_email_users',
'CRM_NOTICE_BOARD' => 'crm_notice_board',
'CRM_NOTICE_BOARD_USER' => 'crm_notice_board_user',
'CRM_INTERNAL_EMAIL_REPLY' => 'crm_internal_email_reply',
'CRM_REFUND_REQUEST' => 'crm_refund_request',
'CRM_CALL_DISPOSITION' => 'crm_call_disposition',
'CRM_KNOWLEDGE_MANAGEMENT' => 'crm_knowledge_management',
'CRM_RESOURCE_MANAGEMENT' => 'crm_resource_management',
'CRM_NEWSLETTER_SEND' => 'crm_newsletter_send',
'CRM_USER_EMPLOYMENT' => 'crm_user_employment',
'CRM_USER_ATTENDANCE' => 'crm_user_attendance',
'CRM_CAMPAIGN' => 'crm_campaign',
'CRM_CAMPAIGN_EXPECTED_RESPONSE' => 'crm_campaign_expected_response',
'CRM_CAMPAIGN_STATUS' => 'crm_campaign_status',
'CRM_CAMPAIGN_TYPE' => 'crm_campaign_type',
'CRM_LEAD' => 'crm_lead',
'CRM_LEAD_INDUSTRY' => 'crm_lead_industry',
'CRM_LEAD_RATING' => 'crm_lead_rating',
'CRM_LEAD_SOURCE' => 'crm_lead_source',
'CRM_LEAD_STATUS' => 'crm_lead_status',
'CRM_QA_MASTER' => 'crm_qa_master',
'CRM_QA_MASTER_TYPE' => 'crm_qa_master_type',
'CRM_QA_MASTER_USERS' => 'crm_qa_master_users',
'CRM_CASE_FEEDBACK' => 'crm_case_feedback',
'CRM_INTERNET_OPTION' => 'crm_internet_option',
'CRM_QUALITY_REMARK' => 'crm_quality_remark',
'CRM_CHARGE_BACK' => 'crm_charge_back',
'CRM_AVG_KEY' => 'crm_avg_key',
'CRM_CLEAROMIZE' => 'crm_clearomize_key',
'CRM_ANTISPYWARE' => 'crm_antispyware',
'CRM_ANTIHIJACKING' => 'crm_antihijacking',
'CRM_BACKUP_TOOL' => 'crm_backup_tool',
'CRM_OPEN_CASE' => 'crm_open_case',
'CRM_CALL_SCHEDULE' => 'crm_call_schedule',
'CRM_REQUEST_CHARGEBACK_REFUND' => 'crm_request_chargeback_refund',
'CRM_USER_PENDING_ATTANDENCE' => 'crm_user_pending_attandence',
'CRM_ATTENDANCE_MASTER' => 'crm_attendance_master',
'CRM_UNRELATED_CALLS' => 'crm_unrelated_calls',
);
define('ERROR_MESSAGE','<div id="login_error"> %s</div>');
define('SUBMIT_MESSAGE','<div class="message_div"> %s</div>');
define('RECORD_DELETE','<div id="login_error"><strong>DELETE</strong>: %s</div>');
define('RECORD_UPDATE','<div class="message_div"><strong>UPDATE</strong>: %s</div>');
define('RECORD_INSERT','<div class="message_div"><strong>INSERT</strong>: %s</div>');
define('RECORD_STATUS_CHANGE','<div class="message_div"><strong>STATUS</strong>: %s</div>');
$gaps_obj_1 = new gaps_sql();
$gaps_obj_1->gaps_connect();
$gaps_obj_2 = new gaps_sql();
$gaps_obj_2->gaps_connect();
$gaps_obj_3 = new gaps_sql();
$gaps_obj_3->gaps_connect();
error_reporting(0);
The process can be applied to any other files you have, but considering the time and effort involved I wouldn't be able to do it for free =/
On further review, I have succeeded in automating the process. I have created a tool that reverses this supposedly irreversible process.
You can find the tool here: http://thedarkworld.net/phpmc260.php The server has since been taken down, but I've re-created it in a JSFiddle.
and suddenly, I don't know what he did, but my screen froze for 10 minutes
Blind bet is that your app allows file uploads and this feature is very much broken in your code as you allow uploaded files to be reached directly if one knows the right url. I suggest to inspect upload folder however the uploaded PHP script that did the mess could self-remove too.
it says its one-way encryption and cannot be reverted back.
There's no one way encryption as it would be no point of such.
I don't have any back up and it took so much to code
"so much to code" and no backup, no VCS. Well...

Translate value before sending information

is there a away to translate values in php using either google api translate or any other api...
<?php
// 1.- Query to get information
// 2.- build array with that query
// Example array from query
$data = array(
'0' => array (
'name' => 'Zapatos',
'color' => 'Verde'
),
'1' => array (
'name' => 'Casa',
'color' => 'Rosa'
),
);
// Now that the array has been build, lets make a translation
// Which I have no idea how to do that but the final array should be
$final = array(
'0' => array (
'name' => 'Zapatos',
'color' => 'Verde',
'name_en' => 'Shoes',
'color_en' => 'Green'
),
'1' => array (
'name' => 'Casa',
'color' => 'Rosa',
'name_en' => 'House',
'color_en' => 'Pink'
),
);
is this process possible or am I just dreaming?
I have very little knowledge on how exactly Goolge API works since I only use the Google Translate widget and the translation is after you present the information but in this case we need to make a translation before presenting the information...
Google translate API is a paid service. You need to get a api key from google api services :
google translate API
After that, you can make a curl to google api after getting your results from query :
sample url for curl :
https://www.googleapis.com/language/translate/v2?key=INSERT-YOUR-KEY&source=en&target=de&q=Hello%20world&q=My%20name%20is%20Jeff
You will get the results as JSON object,do json_decode and add results to your array.

Categories