40

I know this could sound a little weird, but I need to pass some parameters to the $_POST array. Similar to the way Apache does it, or any other web server.

Unfortunately I couldn't find libapache2-mod-php5 anywhere for my Ubuntu installation.

2
  • see superuser.com/questions/149329/… and it should be merged. Commented Apr 13, 2011 at 20:39
  • This is not about cURL. The canonical for that is ID 5647461, "How do I send a POST request with PHP?". Commented Feb 10, 2021 at 0:33

3 Answers 3

66

Just insert the following lines at the beginning of your script:

/* If started from the command line, wrap parameters to $_POST and $_GET */
if (!isset($_SERVER["HTTP_HOST"])) {
  parse_str($argv[1], $_GET);
  parse_str($argv[1], $_POST);
}

This small piece of code does the trick (you may decide if you want to use $_GET or $_POST or, like I needed it, both.

After changing your script, you can call it from the command line passing your arguments:

php yourscript.php 'arg1=x&arg2=y'
Sign up to request clarification or add additional context in comments.

6 Comments

This worked like a charm. I'm actually using Zend's version of Eclipse. I created a debug profile, as per Zend's documentation, and added PHP Script Arguments. I put your code at the top of the PHP script and viola! It parsed the arguments stored in $argv[] into the _POST array. Much grats!!!
Didn't work quite like that for me (W10 OS): single quotes for the $_GET/$_POST arrays had to be replaced by double quotes.
Undefined index: REQUEST_METHOD
Does not seem to work properly with filter_input(INPUT_POST,...)
|
19

That's not easily doable. You can invoke the php-cgi binary and pipe a fake POST request in. But you'll need to set up a whole lot of CGI environment variables:

echo 'var1=123&var2=abc' | REQUEST_METHOD=POST  SCRIPT_FILENAME=script.php REDIRECT_STATUS=CGI CONTENT_TYPE=application/www-form-urlencoded php-cgi 

Note: Insufficient, doesn't work like that. But something like that...


It's certainly easier if you just patch the script, and let it load the $_POST array from a predefined environment variable.

$_POST = parse_url($_SERVER["_POST"]);

Then you can invoke it like _POST=var=123 php script.php for simplicity.

2 Comments

how is this better than just using cURL?
@Neal: The question wasn't about invoking a POST request to an URL, but directly on a script.
0
curl --data "name=ii" "param1=value1&param2=value2" http://test.com/sample.php

3 Comments

OP not asking for curl
I see no reason to downvote this. The OP didn't ask for curl, but he also wasn't very specific and this answer definitely works. It's also definitely easy. Upvoted.
Curl must go through the web server and he specifically stated that he wasn't using a server.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.