On Tue, Nov 11, 2014 at 5:43 PM, Larry Martell <larry.mart...@gmail.com> wrote: > On Tue, Nov 11, 2014 at 11:00 AM, Marc Aymerich <glicer...@gmail.com> wrote: >> On Tue, Nov 11, 2014 at 4:48 PM, Larry Martell <larry.mart...@gmail.com> >> wrote: >>> >>> I have a PHP app that I want to convert to django. But I want to do it >>> stages. All the heavy lifting is in the PHP code, so first, I want to >>> just use templates and views to generate the HTML, but still call the >>> PHP code. Then later convert the PHP to python. >>> >>> My issue is that the PHP code expects to get all it's input from the >>> REQUEST object and I've consumed that in the view. Is there any way I >>> can somehow supply that to the PHP code? >>> >>> Is there some way python can communicate like curl ... it needs to >>> send the request string in the body of a POST request to the URL that >>> will route to the PHP script and get the output back. >> >> >> Yes, >> I supose you can extract the needed information from the django >> Request object and call the php script passing the needed variables as >> environment state. >> >> as a guideline you can do something like >> >> cmd = ( >> 'REDIRECT_STATUS=200 ' >> 'REQUEST_METHOD=GET ' >> 'SCRIPT_FILENAME=htdocs/index.php ' >> 'SCRIPT_NAME=/index.php ' >> 'PATH_INFO=/ ' >> 'SERVER_NAME=site.tld ' >> 'SERVER_PROTOCOL=HTTP/1.1 ' >> 'REQUEST_URI=/nl/page ' >> 'HTTP_HOST=site.tld ' >> '/usr/bin/php-cgi' >> ) >> subprocess.Popen(cmd, stdout=subprocess.PIPE) > > Thanks very much Marc. In the example, how is the request string passed in?
Yeah, a more complete example would be cmd = ( 'REDIRECT_STATUS={status} ' 'REQUEST_METHOD={method} ' 'SCRIPT_FILENAME={file} ' 'SCRIPT_NAME=/index.php ' 'PATH_INFO={path} ' 'SERVER_NAME=site.tld ' 'SERVER_PROTOCOL=HTTP/1.1 ' 'REQUEST_URI={path} ' 'HTTP_HOST=site.tld ' '/usr/bin/php-cgi' ).format( status=request.status, method=request.method, path=request.path, file=my_php_path_mapper(request.path), ) php = subprocess.Popen(cmd, stdout=subprocess.PIPE) response, err = php.communicate() if php.return_code != 0: return ResponseError(content=err) return Response(content=response) still incomplete and mostly wrong, but good enough to illustrate the main pattern :) -- Marc -- https://mail.python.org/mailman/listinfo/python-list