PHPでファイルアップロードスクリプトを使用しています。スクリプトは小さい(2MB未満)でも正常に機能しますが、このスクリプトでアップロードする必要のある大きいファイル(約20MB)はアップロードされません。
スクリプトは以下のとおりです。その後、さらに説明があります。
<?php
if($_SERVER["REQUEST_METHOD"] == "POST")
{
$file = $_FILES["uploaddistance"]["name"];
$fileTmpLoc = $_FILES["uploaddistance"]["tmp_name"];
$pathlevel3 = 'distance/level3/';
$pathlevel4 = 'distance/level4/';
$pathlevel5 = 'distance/level5/';
$pathlevel6 = 'distance/level6/';
$level = $_POST['distancecourse'];
$module = $_POST['distancemodule'];
$kaboom = explode(".", $file);
$extension = end($kaboom);
if ($level == "level3"){
$pathandname = $pathlevel3 . $module . '.' . $extension;
if (file_exists($pathandname)){
unlink($pathandname);
$moveresult = move_uploaded_file($fileTmpLoc, $pathandname);
if ($moveresult == true){
echo "Workbook uploaded";
}
}
else {
$moveresult = move_uploaded_file($fileTmpLoc, $pathandname);
if ($moveresult == true){
echo "Workbook uploaded";
}
}
}
else if ($level == "level4"){
$pathandname = $pathlevel4 . $module . '.' . $extension;
if (file_exists($pathandname)){
unlink($pathandname);
$moveresult = move_uploaded_file($fileTmpLoc, $pathandname);
if ($moveresult == true){
echo "Workbook uploaded";
}
}
else {
$moveresult = move_uploaded_file($fileTmpLoc, $pathandname);
if ($moveresult == true){
echo "Workbook uploaded";
}
}
}
else if ($level == "level5"){
$pathandname = $pathlevel5 . $module . '.' . $extension;
if (file_exists($pathandname)){
unlink($pathandname);
$moveresult = move_uploaded_file($fileTmpLoc, $pathandname);
if ($moveresult == true){
echo "Workbook uploaded";
}
}
else {
$moveresult = move_uploaded_file($fileTmpLoc, $pathandname);
if ($moveresult == true){
echo "Workbook uploaded";
}
}
}
else if ($level == "level6"){
$pathandname = $pathlevel6 . $module . '.' . $extension;
if (file_exists($pathandname)){
unlink($pathandname);
$moveresult = move_uploaded_file($fileTmpLoc, $pathandname);
if ($moveresult == true){
echo "Workbook uploaded";
}
}
else {
$moveresult = move_uploaded_file($fileTmpLoc, $pathandname);
if ($moveresult == true){
echo "Workbook uploaded";
}
}
}
else {
echo "Error 1";
echo $level;
echo $module;
}
}
else {
echo "error 2";
}
?>
大きなファイルをアップロードすると、「エラー1」メッセージが表示され、POST値がスクリプトに渡されていないことを示しています。私が言ったように、これは小さなファイルをアップロードする場合には当てはまりません。
カスタムphp.iniファイルを作成し、最大ファイルサイズを変更してみました。次の変更を加えました。
upload_max_filesize = 64M
post_max_size = 64M
memory_limit = 96M
php.iniファイルは私のホームディレクトリ(public_html)にあります。私が理解しているように、これはディレクトリ内のすべてのスクリプトによって自動的に使用されるはずです。サイトでテストを実行するphpinfo()
と、ロードされた構成ファイルはpublic_html / php.ini(詳細については、 http: //www.xenonacademy.org.uk/phptest.phpを参照)であると表示されます。これは、構成ファイルが正しいですが、何らかの理由で問題が解決しません。
また、このテストを実行するmemory_limit
と、php.iniで指定した96ではなく64Mであることが示されますが、upload_max_filesize
とpost_max_size
は正しいです。これらが正しく設定されている場合、なぜこれが機能しないのですか?関連するスクリプトでphp.iniを使用する必要include()
がありますか、それともここでより複雑な作業が行われていますか?
誰かが私がどこで間違っているのか説明できますか?
ありがとう!