SQLの窓

2018年02月10日


PHP をコマンドプロンプトから実行して、WEB 上のデータを取得するいくつかの方法

もちろん、PHPのコードを書いて実行してしまえばいいのですが、単純にダウンロードしたり、データの先頭の一部分だけを取り出したい場合、コピー & ペーストで比較的簡単に行えるので、バッチ処理の一部として応用できるかもしれません。

php.ini に allow_url_fopen = On が設定されている事を確認して下さい
php -r "print ini_get('allow_url_fopen');"

コマンドプロンプトの設定

まずは簡易編集モードである事を確認し、右クリックでコマンドプロンプトにペーストできるようにします。(PowerShell も基本的には同じで、cmd と入力すればコマンドプロンプトになります。)



PHP 処理専用のコマンドウインドウ作成

以下のバッチファイルを作成して、エクスプローラからダブルクリックで実行します。
@echo off
setlocal
REM ▼ PHP のあるパスの追加
path=%path%;c:\php
title PHP 実行用
prompt work$G
mode con:cols=85 lines=50

cmd /k

title 終了しました : PHP 実行用
endlocal


REM php -r "copy('http://winofsql.jp/info.php','info.htm');"
REM php -r "print file_get_contents('http://winofsql.jp/info.php');"
REM php -r "print file_get_contents('http://winofsql.jp/info.php');" > info.html
REM php -r "file_put_contents('info.txt',file_get_contents('http://winofsql.jp/info.php'));"




実行コマンドは、サンプルバッチファイル内にコメントにして書いてありますが、それぞれは以下のような機能になります。

ダウンロード
php -r "copy('http://winofsql.jp/info.php','info.htm');"

表示
php -r "print file_get_contents('http://winofsql.jp/info.php');"

これは、リダイレクトするとダウンロードと同じ事になります

ダウンロード
php -r "file_put_contents('info.txt',file_get_contents('http://winofsql.jp/info.php'));"

ただの、ダウンロードならは copy で十分ですが、データが json なんかの場合はこのように関数を組み合わせるといいと思います。(json_encode から print_r で file_put_contents)

また、fopen fread fwrite で、データの一部分をダウンロードできます。
php -r "$i=fopen('http://winofsql.jp/info.php','r');$o=fopen('info.4096',"w");$r=fread($i,4096);fwrite($o,$r);"


posted by lightbox at 2018-02-10 00:34 | PHP + 通信 | このブログの読者になる | 更新情報をチェックする

2017年09月02日


FormData を使用して $.ajax で送信すると、ファイルのアップロードとメール送信(ファイル添付)を一度に行えます

mb_send_mail による メール送信におけるファイル添付の普通のサンプルはこちら

呼び出し
	$( "#base" ).submit(function( event ) {

		event.preventDefault();

		$("#action").prop( "disabled", true );
		$("#action_copy").prop( "disabled", true );
		
		// 新規送信用オブジェクト
		var formData = new FormData();

		// 入力テキスト
		formData.append("fld_to", $("input[name='fld_to']").val() );
		formData.append("fld_subject", $("input[name='fld_subject']").val() );
		formData.append("fld_body", $("textarea[name='fld_body']").val() );
		// ファイルオブジェクト( type="file" )
		formData.append("fld_file", $("input[name='fld_file']").get(0).files[0]);

		$.ajax({
			url: "app-mail.php",
			type: "POST",
			data: formData,
			processData: false,  // jQuery がデータを処理しないよう指定
			contentType: false   // jQuery が contentType を設定しないよう指定
		})
		.done(function( data, textStatus ){
			console.log( "status:" + textStatus );
			console.log( "data:" + JSON.stringify(data, null, "    ") );

			if ( data.status == 0 ) {

				toastr.info("メールが送信されました");

				$("input[name='fld_subject']").val( "" );
				$("textarea[name='fld_body']").val( "" );

			}

			if ( data.status == 1 ) {
				// エラーメッセージを表示
				toastr.error("メール送信に失敗しました");

			}
			
		})
		// 失敗
		.fail(function(jqXHR, textStatus, errorThrown ){
			console.log( "status:" + textStatus );
			console.log( "errorThrown:" + errorThrown );
		})
		// 常に実行
		.always(function() {

			$("#action").prop( "disabled", false );
			$("#action_copy").prop( "disabled", false );

		})
		;		
	
	});

受け側の PHP

$_POST['fld_body'] の中身は UTF-8 ですが、mb_send_mail が変換してくれます。
<?php
// ***************************
// このアプリ特有の定義
// ***************************
require_once("../mail-jquery/app.model");

$GLOBALS["content_type"] = "application/json";
$GLOBALS["upload_dir"] = "./upload";

require_once("{$GLOBALS["common_path"]}common.php");

// type="file" のフィールドの name の値
$fld = "fld_file";

// ******************************************************
// アップロード 処理
// ******************************************************
if ( !$_FILES ) {
	// php.ini の upload_max_filesize を超えて、
	// Apache に制限が無いと $_FILE が空になる
	$_FILES[$fld]['error'] = 5;	// ユーザエラーメッセージ
}

// *************************************
// アップロード処理
// フィールド名 : $fld で固定
// *************************************

// true では実行しない
if ( !$GLOBALS["debug_update"] ) {

	$upload = realpath ( $GLOBALS["upload_dir"] );
	$upload .= ( DIRECTORY_SEPARATOR . $_FILES[$fld]['name'] );
	if ( move_uploaded_file(
		$_FILES[$fld]['tmp_name'], $upload ) ) {
		$_POST['result']  = "アップロードに成功しました";
	}
	else {
		if ( !$_FILES ) {
			$_FILES[$fld]['error'] = 5;	// ユーザエラーメッセージ
		}
		$_POST['result']  = "アップロードに失敗しました";
	}

}
else {
	if ( $_FILES[$fld]['error'] == 0 ) {
		$_POST['result']  = "アップロードに成功しました";
	}
	else {
		$_POST['result']  = "アップロードに失敗しました";
	}
}


$_POST['files'] = $_FILES;

// *************************************
// メール処理
// *************************************
mb_language("Japanese");
mb_internal_encoding("UTF-8");

$uniqid = uniqid();

$from_header = "From: " . mb_encode_mimeheader( mb_convert_encoding("差出人","iso-2022-jp") );

// このソースを置くサーバから使えるメールアドレス
$from_header .= " <{$GLOBALS["mail"]}>\n";
$from_header .= "Content-Type: multipart/mixed; boundary=\"{$uniqid}\"\n";

$mime = $_FILES['fld_file']['type'];
$fname = $_FILES['fld_file']['name'];

$body  = "--{$uniqid}\n";
$body .= "Content-Type: text/plain; charset=\"ISO-2022-JP\"\n";
$body .= "\n";
$body .= $_POST['fld_body'] . "\n";
$body .= "--{$uniqid}\n";
$body .= "Content-Type: {$mime}; name=\"{$fname}\"\n";
$body .= "Content-Transfer-Encoding: base64\n";
$body .= "Content-Disposition: attachment; filename=\"{$fname}\"\n";
$body .= "\n";

// アップロードされたファイル
$path = $upload;
$data = file_get_contents($path);
$encode = base64_encode($data);

$body .= chunk_split($encode);
$body .= "\n--{$uniqid}--\n";

if ( !$GLOBALS["debug_update"] ) {
	$result = mb_send_mail(
		$_POST["fld_to"],
		$_POST["fld_subject"],
		$body,
		$from_header );
}
if ( $result ) {
	$error = 0;
}
else {
	$error = 1;
}

// アップロードして添付したファイルを削除
unlink($path);


// ***************************
// JSON データ作成
// ***************************
$json = new stdClass;

$json->post = $_POST;			// 行データ
$json->status = $error;		// エラー
if ( !$GLOBALS["debug_update"] ) {
	$json->user = $GLOBALS["mail"];
	$json->debug = $from_header;
}

print json_encode( $json, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE );

?>

関連する記事

fake sendmail for windows を使って、PHP でごく普通に( mb_send_mail で )メール送信 : Gmail なので ssl(465)




posted by lightbox at 2017-09-02 16:57 | PHP + 通信 | このブログの読者になる | 更新情報をチェックする

ファイルのアップロードからそれを添付してメールを送るテンプレート(スケルトン)



メール送信部分には、『mb_send_mail』を使用しているので、インターネット上のサーバーで、そこからパスワード無しでメールアドレスが利用できる必要があります。

※ fake sendmail for windows でも動作確認しました
※ FormData を使用して送信すると、ファイルのアップロードとメール送信を一度にできます。
( FormData を使用したサンプル )



メールアドレスは、mail.php で、セッション変数にセットして使用しています。

Content-Type の MIME は、ファイルアップロード時に取得した type をセッション変数に保存して使用しています。
<?php
require_once("common.php");

$_SESSION['user'] = "セッションデータを表示する為のダミー";
$_SESSION["mail_from"] = "メールアドレス";

require_once("mail_view.php");
?>
ファイル一覧
  • common.php
  • debug_value.php
  • mail.php
  • mail_view.php
  • form2.php
  • form2_view.php
  • upload1.php
  • html_head.php
  • mail_ex.php
  • style.css ※ ソース全体参照へのリンク
  • メール送信部分の mail_ex.php
    <?php
    require_once("common.php");
    
    require_once("html_head.php");
    
    foreach( $_POST as $Key => $Value ) {
    	$_POST[$Key] = str_replace("\\\\", "\\", $Value );
    	$_POST[$Key] = str_replace("\\'", "'", $_POST[$Key] );
    	$_POST[$Key] = str_replace("\\\"", "\"", $_POST[$Key] );
    }
    
    
    mb_language( "ja" );
    mb_internal_encoding("utf-8");
    
    $from = $_SESSION["mail_from"];
    $fname = $_SESSION["mail_file"];
    $mime = $_SESSION['mime'];
    
    if ( $fname == "" ) {
    	print "ファイルをアップロードして下さい <a href=\"mail.php\">戻る</a><br>";
    	exit();
    }
    
    $uniqid = uniqid();
    
    $headers = "From: {$from}\n";
    $headers .= "Content-Type: multipart/mixed; boundary=\"{$uniqid}\"\n";
    
    $body  = "--{$uniqid}\n";
    $body .= "Content-Type: text/plain; charset=\"ISO-2022-JP\"\n";
    $body .= "\n";
    $body .= $_POST['text'] . "\n";
    $body .= "--{$uniqid}\n";
    $body .= "Content-Type: {$mime}; name=\"{$fname}\"\n";
    $body .= "Content-Transfer-Encoding: base64\n";
    $body .= "Content-Disposition: attachment; filename=\"{$fname}\"\n";
    $body .= "\n";
    
    $path = "upload_file/{$fname}";
    $data = file_get_contents($path);
    $encode = base64_encode($data);
    
    $body .= chunk_split($encode);
    $body .= "\n--{$uniqid}--\n";
    
    $ret = mb_send_mail(
    	$_POST['to_address'],
    	$_POST['subj'],
    	$body,
    	$headers );
    
    // アップロードして添付したファイルを削除
    unlink($path);
    $_SESSION["mail_file"] = "";
    
    if ( $ret === TRUE ) {
    	print "<a href=\"mail.php\">戻る</a> メール送信が終了しました。<br>";
    }
    else {
    	print "<a href=\"mail.php\">戻る</a> メール送信に失敗しました。<br>";
    }
    
    print "</body>";
    print "</html>";
    ?>
    
    
    ファイルのアップロード後、アップロードフォルダのファイルのタイムスタンプが5分以上経過している場合は削除します。(upload1.php)
    
    ファイルアップロードの実行は IFRAME 内の別ページで行っています。さらに、IFRAME 内の IFRAME にアップロード結果を表示している為、アップロード結果の『ファイル名』をメインページに転送する為、JavaScript を PHP で出力しています。
    
    その際、メインページでは jQuery を使用しているので、メインページの jQuery を使用してファイル名をテキストフィールドに転送しています
    
    if ( move_uploaded_file( $_FILES['file_1']['tmp_name'], $upload ) ) {
    	print "アップロードに成功しました<br>";
    	$_SESSION["mail_file"] = $target;
    	print "<script>";
    	print " parent.parent.$('#mail_file').val( \"{$target}\" );";
    	print "</script>";
    }
    else {
    	print "アップロードに失敗しました<br>";
    }
    
    
    関連する記事
    
    fake sendmail for windows を使って、PHP でごく普通に( mb_send_mail で )メール送信 : Gmail なので ssl(465)
    
    
    
    
    posted by lightbox at 2017-09-02 16:33 | PHP + 通信 | このブログの読者になる | 更新情報をチェックする

    2015年11月05日


    PHP : mb_send_mail を使用した自家用メール送信 API

    連想配列のキー部分がプロパティと一致したらセットする( メール送信用クラス ) では、$_GET でメール用のクラスのテストを行いましたが、実際にレンタルサーバに置いて、自分専用の API として整備しました。
    
    ブラウザからも直接使えるように、header( "Access-Control-Allow-Origin: *" ); を実行しています。
    
    自分専用ですが、イザという時に全て遮断できるように簡易パスワードを設定してあります。
    
    呼び出し側は POST で送信して、FORM 要素を使用する場合は、name の値を クラスのプロパティと一致させるだけで利用可能です。( 但し差出人のメールアドレスは仕様上固定です )
    
    
    { "error": "nothing" } は、正常終了です
    
    <?php
    header( "Content-Type: application/json; Charset=utf-8" );
    header( "pragma: no-cache" );
    header( "Expires: Wed, 31 May 2000 14:59:58 GMT" );
    header( "Cache-control: no-cache" );
    header( "Access-Control-Allow-Origin: *" );
    
    mb_language( "ja" );
    mb_internal_encoding("utf-8");
    
    if ( $_POST['pass'] != "簡易パスワード" ) {
    	print '{ "error": "no pass" }';
    	exit();
    }
    
    $mail = new mail_data();
    
    $_POST['from_address'] = "サーバ側で認証の必要の無いメールアドレス";
    
    $mail->send_mail_set($_POST);
    
    $result = $mail->send_mail();
    
    if ( $result ) {
    	print '{ "error": "nothing" }';
    }
    else {
    	print '{ "error": "mb_send_mail" }';
    }
    
    // ***********************************************
    // メール処理用クラス
    // ***********************************************
    class mail_data {
    
    	public $from_address;
    	public $from_text;
    	public $to_address;
    	public $to_text;
    	public $subject;
    	public $body;
    
    	// ***********************************************
    	// 連想配列のキー部分がプロパティと一致したらセット
    	// ***********************************************
    	public function send_mail_set( $data ) {
    
    		foreach( $data as $k => $v ) {
    			if ( property_exists( $this, $k ) ) {
    				$this->{$k} = $v;
    			}
    		}
    
    	}
    
    	// ***********************************************
    	// サーバー(メールサーバ)送信処理
    	// ***********************************************
    	public function send_mail() {
    
    		$from = mb_convert_encoding( $this->from_text, "JIS", "utf-8" );
    		$from = "From: =?ISO-2022-JP?B?" . base64_encode($from) . "?= <{$this->from_address}>";
    		$to = mb_convert_encoding( $this->to_text, "JIS", "utf-8" );
    		$to = "=?ISO-2022-JP?B?" . base64_encode($to) . "?= <{$this->to_address}>";
    		return mb_send_mail($to, $this->subject, $this->body, $from );
    	}
    
    }
    ?>
    
    
    
    ブラウザからの ajax を想定していますが、以下は FORM による 直接テスト用の画面になります
    
    send_test.php
    
    <!DOCTYPE html>
    <html>
    <head>
    <meta http-equiv="Content-type" content="text/html; charset=utf-8">
    
    <script src="//ajax.googleapis.com/ajax/libs/jquery/2.1.4/jquery.min.js"></script>
    <link rel="stylesheet" href="//ajax.googleapis.com/ajax/libs/jqueryui/1.10.1/themes/base/jquery-ui.css">
    <script src="//ajax.googleapis.com/ajax/libs/jqueryui/1.10.1/jquery-ui.min.js"></script>
    
    <style>
    .title {
    	display: inline-block;
    	width: 150px;
    	padding: 15px;
    }
    
    .entry {
    	display: inline-block;
    	width: 350px;
    	padding: 15px;
    }
    
    </style>
    <script>
    // jQuery 初期処理
    $(function() {
    
    	$("input,textarea").prop("required", true );
    
    });
    </script>
    </head>
    <body>
    <div>
    
    <?php
    // -------------------------------------
    // フォーム開始
    // -------------------------------------
    ?>
    <form 
    	method="post"
    	action="send_mail.php"
    	target="_self">
    <?php
    // -------------------------------------
    // 簡易パスワード
    // -------------------------------------
    ?>
    <input 
    	type="hidden"
    	name="pass"
    	value="簡易パスワード">
    
    
    <div class="title">差出人(日本語)</div>
    <div class="entry">
    	<input
    		type="text"
    		name="from_text"
    		maxlength="50"
    		style="width:200px">
    </div>
    
    <br>
    
    <div class="title">宛先</div>
    <div class="entry">
    	<input
    		type="text"
    		name="to_address"
    		style="width:200px">
    </div>
    
    <br>
    
    <div class="title">宛先(日本語)</div>
    <div class="entry">
    	<input
    		type="text"
    		name="to_text"
    		style="width:200px">
    </div>
    
    <br>
    
    <div class="title">件名</div>
    <div class="entry">
    	<input
    		type="text"
    		name="subject"
    		style="width:200px">
    </div>
    
    <br>
    
    <div class="title" style='vertical-align:top'>本文</div>
    <div class="entry">
    	<textarea
    		name="body"
    		style="width:200px;height:150px;"></textarea>
    </div>
    
    <br>
    
    
    <div class="title"></div>
    <div class="entry">
    	<input
    		type="submit"
    		name="send"
    		value="送信">
    </div>
    
    </form>
    
    </body>
    </html>
    
    
    
    
    
    
    
    posted by lightbox at 2015-11-05 21:39 | PHP + 通信 | このブログの読者になる | 更新情報をチェックする

    2015年10月03日


    PHP で Windows標準のオブジェクト(CDO.Message)とGMail を使ってメール送信

    ひさしぶりにテスト( Windows7 ) しようとすると、Gmail からエラーが返って来ましたが、Gmail 側で安全性の低いアプリの許可を『有効』にする必要がありました。
    
    また、php 側では、php_com_dotnet.dll を php.ini で有効にする必要があります。
    
    ※ CDO.Message に関する詳細は、ソース内に URL を記述しています
    
    関連する記事
    
    Windows標準のオブジェクト(CDO.Message)とGMail を使ってメール送信
    
    本来は、VBScript で実行するものですが、PHP が分かる人なら、こちらのほうがいろいろ応用がきいて使い勝手もいいと思います。
    
    ▼ バッチファイル
    ------------------------------------------------------
    @echo off
    setlocal
    set PATH=c:\php;%PATH%
    
    php mail.php "題名" "本文\nで す\nよ"
    
    endlocal
    ------------------------------------------------------
    
    mail.php
    
    <?php
    // ***********************************************
    // バッチファイル内容
    // setlocal は、環境変数を一時的に設定する為に使用します
    // php.exe は、c:\php にあります
    // ***********************************************
    /*
    @echo off
    setlocal
    set PATH=c:\php;%PATH%
    
    php mail.php "題名" "本文\nで す\nよ"
    
    endlocal
    */
    
    // ***********************************************
    // php.ini で必要な拡張
    // ***********************************************
    /*
    extension=php_com_dotnet.dll
    */
    
    // ***********************************************
    // Gmail 側の設定
    // ***********************************************
    /*
    安全性の低いアプリの許可を『有効』にする
    
    https://myaccount.google.com/security?pli=1#connectedapps
    */
    
    // ***********************************************
    // PHP の処理開始
    // ***********************************************
    $strFrom = "私です <ユーザ名@gmail.com>";
    $strTo = "あなたです <宛先メールアドレス>";
    
    $strServer = "smtp.gmail.com";
    $nPort = 465;
    $strUser = "ユーザ名@gmail.com";
    $strPass = "パスワード!";
    
    // ***********************************************
    // CDO.Message( CDO for Windows 2000 )
    // ***********************************************
    $cdo = new COM( "CDO.Message" );
    
    $cdo->From = $strFrom;
    $cdo->To = $strTo;
    
    // ***********************************************
    // 題名
    // ***********************************************
    $cdo->Subject = $argv[1];
    
    // ***********************************************
    // バッチファイルで引渡した本文文字列内の \n を実際の改行に変換
    // ***********************************************
    $data = str_replace( "\\n", "\n", $argv[2] );
    $cdo->Textbody = $data;
    
    // ***********************************************
    // 送信情報オプション
    // ***********************************************
    $cdo->Cc = "メールアドレス1,メールアドレス2";
    //$cdo->Bcc = "";
    $cdo->Htmlbody = "<img src=\"http://winofsql.jp/image/winofsql.png\">";
    
    // ***********************************************
    // ファイル添付
    // ***********************************************
    $cdo->AddAttachment( "C:\\Users\\lightbox\\Desktop\\画像\\_img.jpg" );
    
    // cdoSendUsingPort : 2 : Send the message using the network (SMTP over the network)
    // https://msdn.microsoft.com/en-us/library/ms527265.aspx.
    $cdo->Configuration->Fields["http://schemas.microsoft.com/cdo/configuration/sendusing"] = 2;
    
    // The name (DNS) or IP address of the machine hosting the SMTP service through which messages are to be sent.
    // https://msdn.microsoft.com/en-us/library/ms527294.aspx
    $cdo->Configuration->Fields["http://schemas.microsoft.com/cdo/configuration/smtpserver"] = $strServer;
    
    // The port on which the SMTP service specified by the smtpserver field is listening for connections.
    // https://msdn.microsoft.com/en-us/library/ms526227.aspx
    $cdo->Configuration->Fields["http://schemas.microsoft.com/cdo/configuration/smtpserverport"] = $nPort;
    
    // Indicates that SSL should be used when sending messages using the SMTP protocol over the network.
    // https://msdn.microsoft.com/en-us/library/ms526975.aspx
    $cdo->Configuration->Fields["http://schemas.microsoft.com/cdo/configuration/smtpusessl"] = true;
    
    // Specifies the authentication mechanism to use when authentication is required to send messages
    // to an SMTP service using a TCP/IP network socket.
    // https://msdn.microsoft.com/en-us/library/ms526600.aspx
    // 1 : Use basic (clear-text) authentication
    // https://msdn.microsoft.com/en-us/library/ms526961.aspx
    $cdo->Configuration->Fields["http://schemas.microsoft.com/cdo/configuration/smtpauthenticate"] = 1;
    
    // ユーザとパスワード
    $cdo->Configuration->Fields["http://schemas.microsoft.com/cdo/configuration/sendusername"] = $strUser;
    $cdo->Configuration->Fields["http://schemas.microsoft.com/cdo/configuration/sendpassword"] = $strPass;
    
    $cdo->Configuration->Fields->Update();
    
    $cdo->Send();
    
    // ***********************************************
    // レジストリ内容
    // ***********************************************
    /*
    Windows Registry Editor Version 5.00
    
    [HKEY_CLASSES_ROOT\CLSID\{CD000001-8B95-11D1-82DB-00C04FB1625D}]
    @="CDOMessage Class"
    
    [HKEY_CLASSES_ROOT\CLSID\{CD000001-8B95-11D1-82DB-00C04FB1625D}\InprocServer32]
    @="C:\\Windows\\system32\\cdosys.dll"
    "ThreadingModel"="Both"
    
    [HKEY_CLASSES_ROOT\CLSID\{CD000001-8B95-11D1-82DB-00C04FB1625D}\ProgID]
    @="CDO.Message.1"
    
    [HKEY_CLASSES_ROOT\CLSID\{CD000001-8B95-11D1-82DB-00C04FB1625D}\Programmable]
    
    [HKEY_CLASSES_ROOT\CLSID\{CD000001-8B95-11D1-82DB-00C04FB1625D}\VersionIndependentProgID]
    @="CDO.Message"
    */
    ?>
    
    
    参考情報
    
    メーラーからGmailへの接続時に認証(パスワード)のエラーが生じる場合の対処方法
    
    
    
    
    posted by lightbox at 2015-10-03 21:44 | PHP + 通信 | このブログの読者になる | 更新情報をチェックする

    2015年06月22日


    PHP : http 経由でファイルのサイズを取得する file_size 関数と ファイルサイズを付加した get_imagesize 関数

    getimagesize は、ファイルのサイズが取得されません。あまり大きいサイズは事前に排除したいので、ファイルサイズを付加すれば便利だろうと思い、まず file_size 関数を作成しました。
    
    
    
    ※ getimagesize( get_imagesize ) は、画像以外だとエラーになります。
    
    <?php
    header( "Content-Type: text/html; Charset=utf-8" );
    header( "pragma: no-cache" );
    header( "Expires: Wed, 31 May 2000 14:59:58 GMT" );
    header( "Cache-control: no-cache" );
    
    if ( $_SERVER["REQUEST_METHOD"] == "POST" ) {
    
    	if ( $_POST["send"] == "テスト送信" ) {
    		$result = @getimagesize( $_POST["url"] );
    		if ( $result !== false ) {
    			$view = print_r( $result, true );
    
    			$header = get_headers( $_POST["url"] );
    			$view .= print_r( $header, true );
    
    			$size = implode( "\n", $header );
    			$view .= $size;
    
    			if (preg_match('/Content-Length: (\d+)/', $size, $matches)) {
    				$contentLength = (int)$matches[1];
    				$view .= "\n\niamge size : {$contentLength}";
    			}
    
    		}
    		else {
    			$view = "{$_POST["url"]} を読み込めません";
    		}
    	}
    
    	if ( $_POST["send"] == "get_imagesize" ) {
    		$result = get_imagesize( $_POST["url"] );
    		if ( $result !== false ) {
    			$view = print_r( $result, true );
    		}
    		else {
    			$view = "{$_POST["url"]} を読み込めません";
    		}
    	}
    
    	if ( $_POST["send"] == "fle_size" ) {
    		$result = fle_size( $_POST["url"] );
    		if ( $result !== false ) {
    			$view = "filesize : $result";
    		}
    		else {
    			$view = "{$_POST["url"]} を読み込めません";
    		}
    	}
    }
    
    function get_imagesize($url) {
    
    	$result = @getimagesize($url);
    	if ( $result !== false ) {
    		$view = print_r( $result, true );
    
    		$size = fle_size($url);
    		if ( $size !== false ) {
    			$result["size"] = $size;
    		}
    		return $result;
    	}
    	else {
    		return false;
    	}
    
    }
    
    function fle_size($url) {
    
    	$header = @get_headers($url) ;
    	if ( $header !== false ) {
    		$size = implode( "\n", $header );
    		if (preg_match('/Content-Length: (\d+)/', $size, $matches)) {
    			$contentLength = (int)$matches[1];
    			return $contentLength;
    		}
    		else {
    			return false;
    		}
    	}
    	else {
    		return false;
    	}
    
    }
    
    ?>
    <!DOCTYPE html>
    <html lang="ja">
    <head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <title></title>
    <style>
    * {
    	font-size: 16px;
    	font-family: "Hiragino Kaku Gothic ProN", "メイリオ", Meiryo, "MS Pゴシック", sans-serif;
    }
    </style>
    <script src="//ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
    <script>
    $(function(){
    
    });
    </script>
    </head>
    <body>
    
    <form method="post" target="_self">
    	URL => <input type="text" name="url" style="width:800px;" value="<?= $_POST["url"] ?>">
    	<br>
    
    	<input type="submit" name="send" value="テスト送信">
    	<input type="submit" name="send" value="get_imagesize">
    	<input type="submit" name="send" value="fle_size">
    </form>
    <pre>
    <?= $view ?>
    </pre>
    </body>
    </html>
    
    
    ※ ボタン画像
    
    
    
    
    posted by lightbox at 2015-06-22 14:26 | PHP + 通信 | このブログの読者になる | 更新情報をチェックする
    Seesaa の各ページの表示について
    Seesaa の 記事がたまに全く表示されない場合があります。その場合は、設定> 詳細設定> ブログ設定 で 最新の情報に更新の『実行ボタン』で記事やアーカイブが最新にビルドされます。
    
    Seesaa のページで、アーカイブとタグページは要注意です。タグページはコンテンツが全く無い状態になりますし、アーカイブページも歯抜けページはコンテンツが存在しないのにページが表示されてしまいます。
    
    また、カテゴリページもそういう意味では完全ではありません。『カテゴリID-番号』というフォーマットで表示されるページですが、実際存在するより大きな番号でも表示されてしまいます。
    
    ※ インデックスページのみ、実際の記事数を超えたページを指定しても最後のページが表示されるようです
    
    対処としては、このようなヘルプ的な情報を固定でページの最後に表示するようにするといいでしょう。具体的には、メインの記事コンテンツの下に『自由形式』を追加し、アーカイブとカテゴリページでのみ表示するように設定し、コンテンツを用意するといいと思います。
    
    
    ※ エキスパートモードで表示しています
    
    アーカイブとカテゴリページはこのように簡単に設定できますが、タグページは HTML 設定を直接変更して、以下の『タグページでのみ表示される内容』の記述方法で設定する必要があります
    
    
    <% if:page_name eq 'archive' -%>
    アーカイブページでのみ表示される内容
    <% /if %>
    
    <% if:page_name eq 'category' -%>
    カテゴリページでのみ表示される内容
    <% /if %>
    
    <% if:page_name eq 'tag' -%>
    タグページでのみ表示される内容
    <% /if %>
    
    この記述は、以下の場所で使用します
    container 終わり



    フリーフォントで簡単ロゴ作成
    フリーフォントでボタン素材作成
    フリーフォントで吹き出し画像作成
    フリーフォントではんこ画像作成
    ほぼ自由に利用できるフリーフォント
    フリーフォントの書体見本とサンプル
    画像を大きく見る為のウインドウを開くボタンの作成

    CSS ドロップシャドウの参考デモ
    イラストAC
    ぱくたそ
    写真素材 足成
    フリーフォント一覧
    utf8 文字ツール
    右サイド 終わり
    base 終わり