PHP file upload process

Let’s upload the file while looking at the simplest code.

test.php

<form action="test2.php" enctype="multipart/form-data" method="post">
	<input name="file_upload" type="file">
	<input type="submit" value="upload">
</form>

test2.php

	$upload = './'.$_FILES['file_upload']['name'];
	if(move_uploaded_file($_FILES['file_upload']['tmp_name'], $upload)){
		echo 'upload success';
	} else {
		echo 'upload failed';
	}

well done.

PHPでファイルアップロードに確認画面を挟む時

アップロードした一時ファイルは、PHPの実行が終わった時点で削除されてしまう。
よって、$_FILESを次画面に送ってもファイルがない。
よって、確認画面表示時には既にサーバーに仮アップして、完了後にしかるべき場所に移動、という方法がある。

index.php

<p>
								職務経歴書<br>
								<label><input id="select-file" style="display:none" type="file" onChange="file_selected()" name="filename"><input id="file-name" type="text" value="ファイルを選択してください" readonly="readonly" onclick="file_select()"></label><span id="message">選択されていません</span>
							</p>

confirm.php

<td>職務経歴書</td>
							<td>
								<?php
									if(!empty($_POST&#91;"filename"&#93;)){
									    echo $_POST&#91;"filename"&#93;; 
								    } else {
								        echo "-";
								    }   
							    ?>
								
							</td>

当然、これではあかん。。

通信タイムアウト

通信タイムアウトの状況

デフォルトの制限値は30secondとあり、デフォルト値のままですね。
では、公式に沿って試してみましょう。

set_time_limit(20);

while ($i <= 10){ echo "i=$i "; sleep(100); $i++; } [/php] ん、止まってしまった。 sleep(100)の10回はさすがにやりすぎか。

PHP Excel download

$template_path = "entrysheet.xlsm";
$filename = "職務経歴書.xlsm";
$extension = pathinfo($template_path)['extension'];
$file_size = filesize($template_path);

header("Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
header("Content-Length: {$file_size}");
header("Content-Disposition: attachment; filename={$filename}");
readfile($template_path);

openxmlformatsを使うのかー
なるほどねー これでトップ側はOKかな。

Get file size

Confirm how to get a filesize from php official document.
filesize

$filename = "test.swf";
echo $filename . ": " . filesize($filename) . ' bytes';

want to make the notation of numbers comma separated by 3 digits.

$filename = "test.swf";
echo $filename . ": " . number_format(filesize($filename)) . ' bytes';

戻り値

A function can pass a value using an argument when it is called, but as a result of processing in the function, it can return a value from the function to the caller this time.
For example, functions that perform numerical calculations can return the calculation results to the caller, and functions that process strings can return the processed results.

Use the return statement to return a value from a function.

function mul($num1, $num2){
	$sum = $num1 * $num2;
	return $sum;
}

$sum = mul(10, 9);
print "乗算の結果は". $sum . "です。<br>";

print "乗算2の結果は". mul(7, 14)."です。";

乗算の結果は90です。
乗算2の結果は98です。

なるほど、returnで返しているのが戻り値と言えそうですね。

関数の引数とは?

function outputName($name){
	echo "私の名前は".$name. "です。<br>";
}
outputName("坂本");
outputName("五十嵐");
outputName("熊田");

私の名前は坂本です。
私の名前は五十嵐です。
私の名前は熊田です。

関数で引数を取る。
引数は複数も可。

function outputName($last_name, $first_name, $area){
	echo "私の名前は".$last_name.$first_name. $area ."出身です。<br>";
}
outputName("坂本","幸子","沖縄");
outputName("五十嵐","義男","山口");
outputName("熊田","ひろむ","長野");

私の名前は坂本幸子沖縄出身です。
私の名前は五十嵐義男山口出身です。
私の名前は熊田ひろむ長野出身です。

SplFileObject

$file = new SplFileObject(__DIR__ . '/a.txt', 'r');
$file->setFlags(SplFileObject::SKIP_EMPTY | SplFileObject::DROP_NEW_LINE);

foreach($file as $n => $line){
	if($line === false) continue;
	echo "$n $line", PHP_EOL;
}

csvファイルを作ります。
コード 名称
4592 サンバイオ
4596 窪田製薬ホールディングス
4588 オンコリスバイオファーマ
4563 アンジェス
4579 ラクオリア創薬

$csv = new SplFileObject(__DIR__ . '/a.csv', 'r');
$csv->setFlags(SplFileObject::READ_CSV);

$header = [];
foreach ($csv as $row){
	if ($row === [null]) continue;
	if(empty($header)){
		$header = $row;
		continue;
	}
	$data[] = array_combine($header, $row);
}
var_dump($data);

array(5) { [0]=> array(2) { [“コード”]=> string(4) “4592” [“名称”]=> string(15) “サンバイオ” } [1]=> array(2) { [“コード”]=> string(4) “4596” [“名称”]=> string(36) “窪田製薬ホールディングス” } [2]=> array(2) { [“コード”]=> string(4) “4588” [“名称”]=> string(36) “オンコリスバイオファーマ” } [3]=> array(2) { [“コード”]=> string(4) “4563” [“名称”]=> string(15) “アンジェス” } [4]=> array(2) { [“コード”]=> string(4) “4579” [“名称”]=> string(21) “ラクオリア創薬” } }

ぎゃああああああああああああああああああああああああ

File Access

file_get_contents()
Want to read the whole file

readfile()
Want to output the entire contents of the file

file()
want to read line-by-line text file as an array

fopen() + fread()
Want to read the file byte by byte

SplFileObject class
want to read CSV

SplFileObject class
want to operate object-oriented

サンプルのjsonデータを使ってみます。

{
    "glossary": {
        "title": "example glossary",
		"GlossDiv": {
            "title": "S",
			"GlossList": {
                "GlossEntry": {
                    "ID": "SGML",
					"SortAs": "SGML",
					"GlossTerm": "Standard Generalized Markup Language",
					"Acronym": "SGML",
					"Abbrev": "ISO 8879:1986",
					"GlossDef": {
                        "para": "A meta-markup language, used to create markup languages such as DocBook.",
						"GlossSeeAlso": ["GML", "XML"]
                    },
					"GlossSee": "markup"
                }
            }
        }
    }
}
$json = file_get_contents(__DIR__ . '/sample.json');
if($json === false){
	echo ('file not found.');
} else {
	$data = json_decode($json, true);
	var_dump($data);
}

file_get_contents() は、使用頻度高いです。

What is bind?

Bind variables are variables used in SQL statements, which are languages that perform writing and query to a database.

When making similar processing requests repeatedly while changing only a certain number to the database, if you re-set the number of the SQL statement each time, many types of SQL statements will be processed, which is inefficient. In such a case, if the bind variable is used, the database recognizes that “the same SQL statement is repeated processed under another condition”, so that the processing time can be efficiently improved and the processing time can be shortened.

In the case of Oracle Database, bind variables are represented by adding a colon(:) to the beginning of the variable name(e.g :number)

$sql = ‘select name, breed, weight from animals where weight > ? and weight < ?'; $conn = db2_connect($database, $user, $password); $stmt = db2_prepare($conn, $sql); $lower_limit = 1; db2_bind_param($stmt, 1, "lower_limit", DB2_PARAM_IN); db2_bind_param($stmt, 2, "upper_limit", DB2_PARAM_IN); $upper_limit = 15.0; if(db2_execute($stmt)){ while ($row = db2_fetch_array($stmt)){ print "{$row[0]}, {$row[1]}, {$row[2]}\n"; } } [/php]