Macで作業しているデザイナーが作ったファイルがWindowsのDropboxで同期できないのは、ファイル名が原因

Windows で互換性のない文字列
ファイル名を付ける場合、Windows ファイル システムと互換性のない文字列の使用を避けてください。

<(それ以下)
>(それ以上)
:(コロン)
"(二重引用符)
|(垂直線)
?(クエスチョンマーク)
*(星印)
.(ピリオド)またはファイル名やフォルダ名の末尾の空白


あとスラッシュ、バックスラッシュかな

プラスアルファレンタルサーバー上のwordpressサイトをSSL(https)化

https化を試みる。

SSL ON

サーバー管理画面から無料SSL証明書(Let's Encrypt)をインストール。
クリックするだけで簡単。

以下URL参照

※ちなみにさくらインターネットの場合は
サーバーコントロール>ドメイン/SSL設定で
対応したいドメインのSSLの欄にある証明書の列の「登録」をクリックして無料SSL証明書のほうを選択する。

httpへのアクセスを.htaccessを使い強制的にhttpsへ301リダイレクト

.htaccessに以下の記述

RewriteEngine on
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://sample.com/$1 [R=301,L]
phpとかでPOST受け取るものがある場合307にしないとダメ

POSTデータがPOSTとして転送されないみたい。
でもGoogle的には301と思って処理してくれてる?
ネタ元

wordpressコンテンツ内のhttpをhttpsに置換

詳しくは以下URL参照

メモリエラーとかで使えなかったら「Really Simple SSL」を導入しよう

証明書の設定済んでるならプラグイン入れて有効化するだけで対応できるから楽。

心配事

こんな一文があるので.htaccessで301リダイレクトさせてると証明書更新失敗するのかな? 様子見てみる。

  • 大丈夫みたい
※1 無料SSL証明書は当サーバで稼働している限り自動延長されますが
 以下の場合自動延長が失敗します。事前にご確認下さい。
 ・ウェブサイトが当サーバで稼働していない
 ・.htaccessやmod_rewriteなどを利用してリダイレクトさせている場合
 ・アクセス制限をしている場合
 ・弊社提供のサブドメインを利用している場合

MFCのCFileDialogで複数のファイルを取得する

OFN_ALLOWMULTISELECTを設定すると複数のファイルが選択できるようになります。
しかし、これだけではたくさんファイルを選択すると不具合が発生します。
これはファイル名を受け取るバッファがデフォルトのままでは少ないため記憶できる限界を超えてしまうからです。

なので0初期化した大きいバッファを用意して渡してあげる必要があります。

FileDialog dlg(TRUE, NULL, NULL,
                OFN_FILEMUSTEXIST |
                OFN_ALLOWMULTISELECT |   //ファイルを複数設定させる為のフラグ
                OFN_HIDEREADONLY,
                _T("すべてのファイル(*.*)|*.*||"));
char szFileNameBuffer[10000] = {0};      // ファイル名を保存させる為のバッファ
dlg.m_ofn.lpstrFile = szFileNameBuffer;  // バッファの割り当て
dlg.m_ofn.nMaxFile = 10000;              // 最大文字数の設定
if(dlg.DoModal() == IDOK)
{
    POSITION pos = dlg.GetStartPosition();
    while(pos)
    {
        AfxMessageBox(dlg.GetNextPathName(pos));
    }
}

VC++で正規表現

MFCでは正規表現のライブラリ無いけど標準のほうを使えば使える。

C++11で名前空間がtr1からstdになってるらしいので新しい環境ならそれに置き換えてね

#include <iostream>
#include <string>
#include <regex>

...

std::tr1::regex regPattern(strPattern);
std::tr1::match_results<const char *> results;
regex_search(strText.GetBuffer(), results, regPattern, std::tr1::regex_constants::match_default);

CString resultString = "";
std::tr1::match_results<const char *>::const_iterator it = results.begin();
while (it != results.end()) {
	if (it->matched) {
		std::string tmp;
		tmp = it->str();
		resultString.Format("%s",tmp.c_str());
	}
	it++;
}

MFCでディレクトリ内の全てのファイルの取得する

/*-------------------------------------------------------------------------------/

  関数名:void FindAllFile(LPCTSTR pstrName, CListBox &listbox, BOOL bFolder)
  引 数:pstrName 検索するファイルの名前が入っている文字列へのポインタ。
      listbox  ファイル名を格納するCListBoxの参照。
     bFolder   TRUEにするとフォルダ名もリストに登録。
  解 説:ディレクトリ内のファイルを全て検索しリストボックスに登録。

/-------------------------------------------------------------------------------*/
void FindAllFile(LPCTSTR pstrName, CListBox &listbox, BOOL bFolder)
{
    CFileFind fnd;
    if(fnd.FindFile(pstrName, 0))
    {
        int i = 1;
        while(i)
        {
            i = fnd.FindNextFile();

            // 処理が長くなった時の為の対策。
            MSG msg;
            if(::PeekMessage(&msg, (HWND)NULL, 0, 0, PM_REMOVE))
            {
                ::TranslateMessage(&msg);
                ::DispatchMessage(&msg);
            }

            // ファイル名が"."か".."の場合。
            if(fnd.IsDots())
                continue;
                        
            // フォルダだった場合。
            if(fnd.IsDirectory())
            {
                CString strFindFile = pstrName;
                strFindFile.Insert(strFindFile.ReverseFind('\\') + 1,
                                   fnd.GetFileName() + _T("\\"));

                // 再帰呼び出し。
                FindAllFile(strFindFile, listbox, bFolder);
                if(!bFolder)
                    continue;
            }
            // ファイル名の取得・設定
            CString strFilePath = pstrName;
            strFilePath = strFilePath.Left(strFilePath.ReverseFind('\\') + 1);
            listbox.AddString(strFilePath + fnd.GetFileName());
        }
        fnd.Close();
    }
}

使用例

// Cドライブのファイルとフォルダ全てをリストボックスに設定します。
char *findfile = _T("c:\*.*");
FindAllFile(findfile, m_listbox, TRUE);  // m_listboxはリストボックスのメンバ変数