PHPでファイル入出力

ファイル読み込み

<?php

$data = file_get_contents("sample.txt");

?>
<?php

$fp = fopen("sample.txt", "r");
while ($line = fgets($fp)) {
  echo "$line<br />";
}
fclose($fp);

?>

ファイル書き込み

<?php

file_put_contents("sample.txt", "ファイルへの書き込みサンプル");

?>
<?php

$fp = fopen("sample.txt", "w");
fwrite($fp, "ファイルへの書き込みサンプル");
fclose($fp);

?>

ファイル追記

<?php

$fp = fopen("sample.txt", "a");
fwrite($fp, "ファイルへの追記サンプル");
fclose($fp);

?>

ネタ元

PHPでXPathスクレイピング

CME日経先物の最新四本値取得

$html = file_get_contents("http://www.cmegroup.com/trading/equity-index/international-index/nikkei-225-yen_quotes_settlements_futures.html");

$dom = new DOMDocument();
@$dom->loadHTML($html);
$xml = simplexml_import_dom($dom);


$ret = $xml->xpath("//*[@id=\"cmeTradeDate\"]/option[@selected='selected']");
//var_dump($ret);

$yyyymmdd = "19000101";
foreach( $ret as $e  ){
	$yyyy = substr($e["value"],6,4);
	$mm = substr($e["value"],0,2);
	$dd = substr($e["value"],3,2);

	$yyyymmdd = $yyyy . $mm . $dd;

	//echo $yyyymmdd;
	//echo $e;
}

$ret = $xml->xpath("//*[@id=\"settlementsFuturesProductTable\"]/tbody/tr[1]");
//var_dump($ret);

$outStr = "";
foreach( $ret as $e  ){

	$open = $e->td[0];
	$high = $e->td[1];
	$low = $e->td[2];
	$last = $e->td[3];
	$last = substr($last,0,-1);
	$volume = $e->td[6];
	$volume = str_replace(",","",$volume);

	$outStr = "," . $yyyymmdd . "," . $open . "," . $high . "," . $low . "," . $last . "," . $volume;
}

追記

ChromeでXpath取得したとき、tbody入ってる場合、抜かないとエラーになることある

Html Agility PackとXPathでスクレイピング

HtmlAgilityPackを使うにはプロジェクトごとにNuGetから導入する。

  • ソリューションエクスプローラーで導入したいプロジェクトを選択しておいて、メニューバーから[プロジェクト]-[NuGet パッケージの管理]を選ぶ
  • すると、[NuGet パッケージの管理]ダイアログが表示されるので、左側のペーンで[オンライン]を選択してから、右上の検索ボックスに「HtmlAgilityPack」(空白なし)と入力して[Enter]キーを押す。
  • いくつかのパッケージが表示されるので、その中から[HtmlAgilityPack]を選び、そこに表示された[インストール]ボタンをクリックする


コード例

Dim wc As WebClient = New WebClient()
Dim htmlStr As String
htmlStr = wc.DownloadString("http://www.cmegroup.com/trading/equity-index/international-index/nikkei-225-yen_quotes_settlements_futures.html#tradeDate=11/22/2016")

Dim html As HtmlAgilityPack.HtmlDocument = New HtmlAgilityPack.HtmlDocument()
html.LoadHtml(htmlStr)

Dim tags As HtmlAgilityPack.HtmlNodeCollection
tags = html.DocumentNode.SelectNodes("//*[@id=""settlementsFuturesProductTable""]/tbody/tr[1]")

Dim node As HtmlAgilityPack.HtmlNode
For Each node In tags
    Trace.WriteLine(node.InnerText)
Next


ネタ元

お名前.comで取得したドメインを移管せずにさくらインターネットで使用するときの設定方法

・さくらのコントロールパネルでドメインを設定
・さくらのファイルマネージャーでドメインをアップするフォルダを作成
・お名前.comでネームサーバーを変更
・さくらのファイルマネージャーでアクセス設定

ネタ元

excelVBAでロックしたセルに、シート保護を解除せずにデータを書き込む

こんな感じでシート保護を設定(UIのみ)を設定する

Option Explicit

Private Sub Workbook_Open()
    ' 一旦、シート保護を解除
    ActiveSheet.Unprotect
    ' シート保護を設定(UIのみ)
    ActiveSheet.Protect UserInterfaceOnly:=True

    ActiveWindow.ScrollRow = 1
End Sub

ネタ元

PowerShellスクリプトファイル(.ps1)にファイルをドラッグ&ドロップして処理する

普通にはできないのでbatファイルと組み合わせる。

バッチファイル(.bat)記述例
・example.bat

@echo off
powershell -ExecutionPolicy Unrestricted -File %0\..\example.ps1 %*

スクリプトファイル(.ps1)記述例
・example.ps1

foreach ($arg in $args) {
  // do something.
}

ネタ元

powershellでFTPファイルアップロード

引数でアップロードするファイル指定するバージョン

hogehoge.ps1として保存

foreach ($arg in $args) {

	[System.Net.ServicePointManager]::ServerCertificateValidationCallback = {$true}
	
	$filename = $(Get-ChildItem $arg).Name

	#「検証プロシージャによると、リモート証明書は無効です。」みたいなエラーが出たら、サーバー証明書の警告を無視するようにスクリプト内で宣言
	[System.Net.ServicePointManager]::ServerCertificateValidationCallback = {$true}

	$ftpReq = [System.Net.FtpWebRequest]::Create("ftp://FTPサーバーのアドレス/" + $filename)
	$ftpReq.Credentials = New-Object System.Net.NetworkCredential("ユーザー名","パスワード")
	$ftpReq.Method = [System.Net.WebRequestMethods+ftp]::UploadFile
	$ftpReq.EnableSsl = $true
	$ftpReq.KeepAlive = $true
	$ftpReq.UseBinary = $true
	$ftpReq.UsePassive = $true
	$ftpReq.TimeOut = 10000

	$stream = $ftpReq.GetRequestStream()
	$fileStream = New-Object System.IO.FileStream($zipfile, [System.IO.FileMode]::Open, [System.IO.FileAccess]::Read)
	$bytes = New-Object System.Byte[](1024)
	while($true){
		$size = $fileStream.Read($bytes, 0, $bytes.Length)
		if($size -eq 0){
			break;
		}
		$stream.Write($bytes, 0, $size)
	}
	$fileStream.Close()
	$stream.Close()

}

batファイルでは

PowerShell -ExecutionPolicy RemoteSigned -file hogehoge.ps1 アップロードしたいファイル名