Monday, April 30, 2012

How can I capture user input from the cmd line using PHP?

Copy and paste the following command into your shell to create a new file in your current directory:
vim example.php
Copy and paste the following text into your new example.php file:
<?php
$name = trim(shell_exec("read -p 'Enter your name: ' name\necho \$name"));
echo "Hello $name this is PHP speaking\n";
exit;
Save the example.php file.

Next, experience your new PHP program (example.php) capture your user input from the cmd line by copying and pasting the following command into your shell:
php example.php
It will prompt you with the following:
Enter your name: 
You will type your name and then hit enter as shown here:
Enter your name: John
After you hit enter you'll see the PHP program we wrote print out the following text:
Hello John this is PHP speaking
Looking for a cloud-based catalog and CRM platform? Checkout http://rocware.com/

Saturday, April 28, 2012

How do I add syntax highlighting to my Blogger blog?

Step 1) Via Blogger's admin panel, navigate to your "Template" section

Step 2) Click "Edit HTML"

Step 3) Accept the warning by clicking "Proceed"

Step 4) Find your template's </head> tag

Step 5) Copy and paste the following HTML code (omit the .js includes that aren't relevant to your site to increase page load time):
<!-- Syntax Highlighter Additions START -->
<link href="http://alexgorbatchev.com/pub/sh/current/styles/shCore.css" rel="stylesheet" type="text/css" />
<link href="http://alexgorbatchev.com/pub/sh/current/styles/shThemeEmacs.css" rel="stylesheet" type="text/css" />
<script src="http://alexgorbatchev.com/pub/sh/current/scripts/shCore.js" type="text/javascript" />

<script src="http://alexgorbatchev.com/pub/sh/current/scripts/shBrushAS3.js" type="text/javascript" />
<script src="http://alexgorbatchev.com/pub/sh/current/scripts/shBrushBash.js" type="text/javascript" />
<script src="http://alexgorbatchev.com/pub/sh/current/scripts/shBrushColdFusion.js" type="text/javascript" />
<script src="http://alexgorbatchev.com/pub/sh/current/scripts/shBrushCSharp.js" type="text/javascript" />
<script src="http://alexgorbatchev.com/pub/sh/current/scripts/shBrushCpp.js" type="text/javascript" />
<script src="http://alexgorbatchev.com/pub/sh/current/scripts/shBrushCss.js" type="text/javascript" />
<script src="http://alexgorbatchev.com/pub/sh/current/scripts/shBrushDelphi.js" type="text/javascript" />
<script src="http://alexgorbatchev.com/pub/sh/current/scripts/shBrushDiff.js" type="text/javascript" />
<script src="http://alexgorbatchev.com/pub/sh/current/scripts/shBrushErlang.js" type="text/javascript" />
<script src="http://alexgorbatchev.com/pub/sh/current/scripts/shBrushGroovy.js" type="text/javascript" />
<script src="http://alexgorbatchev.com/pub/sh/current/scripts/shBrushJScript.js" type="text/javascript" />
<script src="http://alexgorbatchev.com/pub/sh/current/scripts/shBrushJava.js" type="text/javascript" />
<script src="http://alexgorbatchev.com/pub/sh/current/scripts/shBrushJavaFX.js" type="text/javascript" />
<script src="http://alexgorbatchev.com/pub/sh/current/scripts/shBrushPerl.js" type="text/javascript" />
<script src="http://alexgorbatchev.com/pub/sh/current/scripts/shBrushPhp.js" type="text/javascript" />
<script src="http://alexgorbatchev.com/pub/sh/current/scripts/shBrushPlain.js" type="text/javascript" />
<script src="http://alexgorbatchev.com/pub/sh/current/scripts/shBrushPowerShell.js" type="text/javascript" />
<script src="http://alexgorbatchev.com/pub/sh/current/scripts/shBrushPython.js" type="text/javascript" />
<script src="http://alexgorbatchev.com/pub/sh/current/scripts/shBrushRuby.js" type="text/javascript" />
<script src="http://alexgorbatchev.com/pub/sh/current/scripts/shBrushScala.js" type="text/javascript" />
<script src="http://alexgorbatchev.com/pub/sh/current/scripts/shBrushSql.js" type="text/javascript" />
<script src="http://alexgorbatchev.com/pub/sh/current/scripts/shBrushVb.js" type="text/javascript" />
<script src="http://alexgorbatchev.com/pub/sh/current/scripts/shBrushXml.js" type="text/javascript" />
 
<script language="javascript" type="text/javascript">
 SyntaxHighlighter.config.bloggerMode = true;
 SyntaxHighlighter.all();
</script>
<!-- Syntax Highlighter Additions END -->


Step 6) Click "Save template"

Step 7) Click "Close"

Step 8) Create a new post in HTML mode using the following markup:
<pre class="brush:php;">
&lt;?php
$example = range(0, 9);
foreach ($example as $value)
{
 echo $value;
}
</pre>


Step 9) Click "Publish" and you're done!
Additional information on the syntax highlighting code utilized on this blog and illustrated in this tutorial can be found at http://alexgorbatchev.com/SyntaxHighlighter/.

Looking for a cloud-based catalog and CRM platform? Checkout http://rocware.com/

Is it possible to pass array keys by reference using PHP's native foreach control structure?

Answer: No. However, you can have by ref access to an array's keys using the following code:
<?php
ArrayUtil::ForEachFn($array, function (&$key, &$value) {
    // YOUR CODE HERE
});
To use this technique in your project simply add the following class:
<?php
class ArrayUtil
{
    public static function ForEachFn(Array &$array, $fn)
    {
        $newArray = array();
        foreach ($array as $key => $value)
        {
            $fn($key, $value);
            $newArray[$key] = $value;
        }
        $array = $newArray;
    }
}
To see it all in action checkout the following example:
<?php
// EXAMPLE ARRAY
$array = array(
    'key1' => 'value1',
    'key2' => 'value2',
    'key3' => 'value3',
);

// BEFORE
print_r($array);

// EXAMPLE USAGE
ArrayUtil::ForEachFn($array, function (&$key, &$value) { // NOTE THE FUNCTION'S SIGNATURE (USING & FOR BOTH $key AND $value)
    if ($key === 'key2')
    {
        $key = 'BY REF KEY EXAMPLE'; // THIS IS THE WHOLE POINT OF THIS POST
    }
    if ($value === 'value2')
    {
        $value = 'BY REF VALUE EXAMPLE';
    }
});

// AFTER
print_r($array);

/* THE ABOVE "EXAMPLE USAGE" OUTPUTS:
Array
(
    [key1] => value1
    [key2] => value2
    [key3] => value3
)
Array
(
    [key1] => value1
    [BY REF KEY EXAMPLE] => BY REF VALUE EXAMPLE
    [key3] => value3
)
*/

Looking for a cloud-based catalog and CRM platform? Checkout http://rocware.com/

Friday, April 27, 2012

What's Visa's test credit card number?

4007000000027

Note: The expiration date submitted with the above number must be the current date or later.

Looking for a cloud-based catalog and CRM platform? Checkout http://rocware.com/

What does PHP's print_r($_SERVER) output?

<?php
print_r($_SERVER);
/*
THE ABOVE CODE OUTPUTS:
Array
(
    [HTTP_HOST] => localhost:8888
    [HTTP_USER_AGENT] => Mozilla/5.0 (Macintosh; Intel Mac OS X 10.7; rv:11.0) Gecko/20100101 Firefox/11.0
    [HTTP_ACCEPT] => text/html,application/xhtml+xml,application/xml;
    [HTTP_ACCEPT_LANGUAGE] => en-us,en;q=0.5
    [HTTP_ACCEPT_ENCODING] => gzip, deflate
    [HTTP_CONNECTION] => keep-alive
    [HTTP_REFERER] => http://localhost:8888/?m=settings!subscription!upgrade
    [HTTP_COOKIE] => __utma=111872281.1314222649.1332850396.1335657071.1335660029.147
    [PATH] => /Users/johnerck/svn/rocphp/path:/usr/bin:/bin:/usr/sbin:/sbin
    [SERVER_SIGNATURE] => 
    [SERVER_SOFTWARE] => Apache/2.2.21 (Unix) mod_ssl/2.2.21 OpenSSL/0.9.8r DAV/2 PHP/5.3.6
    [SERVER_NAME] => localhost
    [SERVER_ADDR] => ::1
    [SERVER_PORT] => 8888
    [REMOTE_ADDR] => ::1
    [DOCUMENT_ROOT] => /Users/johnerck/git/rocware.com/www
    [SERVER_ADMIN] => you@example.com
    [SCRIPT_FILENAME] => /Users/johnerck/git/rocware.com/www/index.php
    [REMOTE_PORT] => 53964
    [GATEWAY_INTERFACE] => CGI/1.1
    [SERVER_PROTOCOL] => HTTP/1.1
    [REQUEST_METHOD] => GET
    [QUERY_STRING] => m=dashboard
    [REQUEST_URI] => /?m=dashboard
    [SCRIPT_NAME] => /index.php
    [PHP_SELF] => /index.php
    [REQUEST_TIME] => 1335661670
    [argv] => Array
        (
            [0] => m=dashboard
        )

    [argc] => 1
)
*/
Looking for a cloud-based catalog and CRM platform? Checkout http://rocware.com/

Monday, April 9, 2012

Why does wkhtmltopdf work via Terminal and fail via PHP's shell_exec() when using MAMP?

Question: Why does the following command line command:

wkhtmltopdf /path/to/html/input/file.html /path/to/pdf/output/file.pdf

work as expected when executed via Mac OSX Terminal but fail when executed via PHP's shell_exec() function via MAMP?

Answer: You need to comment out two lines of code within one of MAMP's configuration files.

Within MAMP's /Applications/MAMP/Library/bin/envvars file you'll notice the following two lines:

DYLD_LIBRARY_PATH="/Applications/MAMP/Library/lib:$DYLD_LIBRARY_PATH"
export DYLD_LIBRARY_PATH

Comment both of them out as demonstrated below (note the "#" prefix on each line):

#DYLD_LIBRARY_PATH="/Applications/MAMP/Library/lib:$DYLD_LIBRARY_PATH"
#export DYLD_LIBRARY_PATH

Lastly, within the same file, add the following command to make sure the $PATH environment variable inherited by PHP from Apache includes the directory that contains your wkhtmltopdf executable. Your command will look something like:

export PATH=/parent/path/of/wkhtmltopdf/executable:$PATH

Looking for a cloud-based catalog and CRM platform? Checkout http://rocware.com/

About Me

My photo
I code. I figured I should start a blog that keeps track of the many questions and answers that are asked and answered along the way. The name of my blog is "One Q, One A". The name describes the format. When searching for an answer to a problem, I typically have to visit more than one site to get enough information to solve the issue at hand. I always end up on stackoverflow.com, quora.com, random blogs, etc before the answer is obtained. In my blog, each post will consist of one question and one answer. All the noise encountered along the way will be omitted.