$ _POSTデータが届かないという奇妙な問題があります。まず、これは私のローカルホストでは問題なく機能しますが、Web上の共有ホストでは機能しません。これがフォームです:
_<form action="/add" method="POST" enctype="multipart/form-data">
<div>
Name : <input type='text' name='form[name]' class='form-text ' value="" style='width: 350px' placeholder="I.E. Boulder Vote Bus" maxlength="30"/>
</div>
<div>
Description : <textarea name='form[description]' class='form-bigbox '/></textarea>
</div>
<div class='clearfix pull-left'>
Logo: <input type="file" name='form[image_name]' class='' value="" accept="image/jpeg, image/jpg, image/png"/>
</div>
<div class='clearfix'></div>
<div>
<span id='date' class='change'>
Date : <input type='text' name='form[date]' id='datepicker' class='form-text ' placeholder="mm/dd/yyyy" value="" style='width: 160px;'/>
</span>
Time : <input type='text' name='form[hr]' class='form-text ' style='width: 40px;' placeholder="01" value=""/> : <input type='text' style='width: 40px;' name='form[min]' class='form-text ' placeholder="00" value=""/> <select name='form[ampm]' class='form-text form-select' style='width: 60px;'><option value='am' >AM</option><option value='pm' >PM</option></select>
</div>
<div>
Your Email : <input type='text' name='form[email]' class='form-text ' value="" style='width: 350px' placeholder="[email protected]"/>
</div>
<div>
Zip code : <input type='text' name='form[zipcode]' class='form-text ' value="" placeholder="80304"/> Radius : <input type='text' name='form[radius]' class='form-text ' value="" placeholder="25" style='width:50px;'/> mi
</div>
<div>
<input type='submit' class='form-submit btn-warning' value='Create a Ride' />
</div>
</form>
_
問題は、フォームを送信した後、$ _ POSTデータがないことです。 echo serialize($_POST);
を実行すると、_a:0:{}
_が返されます。ただし、そうした場合、echo file_get_contents('php://input');
は次のようになります。
_------WebKitFormBoundaryLCabCxfMMHCvWsAO
Content-Disposition: form-data; name="form[name]"
Some Name
------WebKitFormBoundaryLCabCxfMMHCvWsAO
Content-Disposition: form-data; name="form[description]"
Some Description
------WebKitFormBoundaryLCabCxfMMHCvWsAO
Content-Disposition: form-data; name="form[image_name]"; filename=""
Content-Type: application/octet-stream
------WebKitFormBoundaryLCabCxfMMHCvWsAO
Content-Disposition: form-data; name="form[date]"
------WebKitFormBoundaryLCabCxfMMHCvWsAO
Content-Disposition: form-data; name="form[hr]"
------WebKitFormBoundaryLCabCxfMMHCvWsAO
Content-Disposition: form-data; name="form[min]"
------WebKitFormBoundaryLCabCxfMMHCvWsAO
Content-Disposition: form-data; name="form[ampm]"
am
------WebKitFormBoundaryLCabCxfMMHCvWsAO
Content-Disposition: form-data; name="form[email]"
------WebKitFormBoundaryLCabCxfMMHCvWsAO
Content-Disposition: form-data; name="form[zipcode]"
------WebKitFormBoundaryLCabCxfMMHCvWsAO
Content-Disposition: form-data; name="form[radius]"
------WebKitFormBoundaryLCabCxfMMHCvWsAO--
_
さらに、奇妙なことに、フォームをたった3つの要素に絞れば、うまくいきます。 3つの要素は問題ありませんが、4つは機能しません。さらに、サイトの他のフォーム(3つ以上の要素を含む)は問題なく機能します。これだけです。
ここにいくつかの関連するPHP私の共有ホストからの設定:
_PHP Version 5.3.16
max_execution_time 300
max_file_uploads 20
max_input_time -1 -1
max_input_vars 1000 1000
memory_limit 128M 128M
post_max_size 500M 500M
_
それがサーバー設定である場合、それが何であるかについての考えはありますか?サイズの問題のようですが、渡されるデータはそれほど多くありません(これらはすべて小さな値です)。
私はhtaccessを持っていますが、関連しているとは思いません(私はcodeigniterを使用しており、標準のCI htaccessであり、他のフォームはa-okで送信します)。
_AddDefaultCharset UTF-8
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
#Removes access to the system folder by users.
#Additionally this will allow you to create a System.php controller,
#previously this would not have been possible.
#'system' can be replaced if you have renamed your system folder.
RewriteCond %{REQUEST_URI} ^system.*
RewriteRule ^(.*)$ /index.php?/$1 [L]
#When your application folder isn't in the system folder
#This snippet prevents user access to the application folder
#Submitted by: Fabdrol
#Rename 'application' to your applications folder name.
RewriteCond %{REQUEST_URI} ^application.*
RewriteRule ^(.*)$ /index.php?/$1 [L]
#Checks to see if the user is attempting to access a valid file,
#such as an image or css document, if this isn't true it sends the
#request to index.php
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?/$1 [L]
</IfModule>
_
以下は、print_r($ _ SERVER)が生成するものです(セキュリティのために少し編集されています)。
_Array
(
[CONTENT_LENGTH] => 1077
[CONTENT_TYPE] => multipart/form-data; boundary=----WebKitFormBoundarydBnbAkAUNJntI6dz
[DOCUMENT_ROOT] => [redaced]
[GATEWAY_INTERFACE] => CGI/1.1
[HTTP_ACCEPT] => text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
[HTTP_ACCEPT_CHARSET] => ISO-8859-1,utf-8;q=0.7,*;q=0.3
[HTTP_ACCEPT_ENCODING] => gzip,deflate,sdch
[HTTP_ACCEPT_LANGUAGE] => en-US,en;q=0.8
[HTTP_CACHE_CONTROL] => max-age=0
[HTTP_CONNECTION] => keep-alive
[HTTP_COOKIE] => vrsession=8pO1KwOg4OPzCYqsJHX0Qr6FPfLteTimRjIKQPRC%2F83GlFRTepX%2FnrfE1yDxYxDXiPa2JcX4kQviV6lezxrXmJHjqVbWMe%2FgRne%2Bp9P4%2FfxlZrxta2Zl4DACs2C2nsp1SkqYj6k6xhP6Wc9Zlpxgsma752%2BGxHkvwnT6%2F%2FTey699wnV5je99kZe%2FIhSa04DZvoGXoFc6bx1%2B%2FZRtSvojD86ktpWK91AUFUvltcoj8%2F31jeX0h%2BR7VEOPMZLBeqJrcn7qZGeQ6N2XvCIsh6gqTRZIPdsvyAIW%2FTTibBiY0qUvh50yE5MH060D8utqsiv4S54UrXypBsCP3H2w66pLXHTQKKrK%2FAsn1SEWb2pew%2BEOE4prm%2BJKGxcAq0efCGhkpsHZoP9ZDKDekMzaJTIxUin99RUeXVZTF0yqsMD5A%2FFF0AdZuz343VWsJcV9zru4hPHaAky5NMoZa6R1be9PwA%3D%3D; __utma=74945813.1164249566.1347560100.1347560100.1347560100.1; __utmb=74945813.176.10.1347560100; __utmc=74945813; __utmz=74945813.1347560100.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none)
[HTTP_Host] => [redacted]
[HTTP_Origin] => [redacted]
[HTTP_REFERER] => [redacted]/add
[HTTP_USER_AGENT] => Mozilla/5.0 (Macintosh; Intel Mac OS X 10_6_8) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/21.0.1180.89 Safari/537.1
[PATH] => /bin:/usr/bin
[PHPRC] => [redacted]
[QUERY_STRING] =>
[REDIRECT_QUERY_STRING] => /add
[REDIRECT_STATUS] => 200
[REDIRECT_UNIQUE_ID] => UFJZCUoyAC0AAE5v7ps
[REDIRECT_URL] => /add
[REMOTE_ADDR] => [redacted]
[REMOTE_PORT] => 48098
[REQUEST_METHOD] => POST
[REQUEST_URI] => /add
[SCRIPT_FILENAME] => [redacted]/index.php
[SCRIPT_NAME] => /index.php
[SERVER_ADDR] => [redacted]
[SERVER_ADMIN] => [redacted]
[SERVER_NAME] => [redacted]
[SERVER_PORT] => 80
[SERVER_PROTOCOL] => HTTP/1.1
[SERVER_SIGNATURE] => <ADDRESS>Apache/1.3.42 Server at [redacted] Port 80</ADDRESS>
[SERVER_SOFTWARE] => Apache/1.3.42 (Unix) Sun-ONE-ASP/4.0.2 Resin/2.1.13 mod_fastcgi/2.4.6 mod_log_bytes/1.2 mod_bwlimited/1.4 mod_auth_passthrough/1.8 FrontPage/5.0.2.2635 mod_ssl/2.8.31 OpenSSL/0.9.7a
[UNIQUE_ID] => UFJZCUoyAC0AAE5v7ps
[PHP_SELF] => /index.php
[REQUEST_TIME] => 1347574025
[argv] => Array
(
[0] => /add
)
[argc] => 1
)
_
<form action="/add"
'/ add'部分をターゲットページ名に変更します:example.php
「変更はありません。codeigniterを使用しているので、htaccessには標準の301があります。」どこかに。 301を使用すると、永久に(場合によっては「永久に」)リダイレクトされます。サーバーからのブラウザーの応答を確認し(保持ログを試行)、投稿がリダイレクトされているかどうかを確認します。その場合、POSTデータは失われます。
test.php
_にコピーしましたtest2.php
_に送信しましたvar_dump($_POST)
で表示される出力変更:_action="/add"
_ (ちなみに私にはディレクトリのように見えます)
宛先:_action="test2.php"
_
次の出力が生成されました。
array(1) { ["form"]=> array(9) { ["name"]=> string(0) "" ["description"]=> string(0) "" ["date"]=> string(0) "" ["hr"]=> string(0) "" ["min"]=> string(0) "" ["ampm"]=> string(2) "am" ["email"]=> string(0) "" ["zipcode"]=> string(0) "" ["radius"]=> string(0) "" } }
出力を別のスクリプト、つまり_"test2.php"
_に送信してみてください