Windows10のフォルダ内に大文字小文字が違う同一名ファイルを保存する (Windows Subsystem for Linux使用)
No Comment 駄日記linux,windwos,wordpressFTPでサーバからファイルをダウンロードした際、Linux上に大文字小文字が違う同一名称のファイルがあると、Windowsが区別出来ない。
そのため、ローカルのファイルを上書きすると片方しか残らない。
Windows,Macでは基本Top.pngとtop.pngのような、ファイル名が一緒だが大文字小文字が違うファイルを同じフォルダに置くことは出来ない。
Top.pngがあるフォルダにtop.pngを移動すると、上書きされる。
Linuxではどちらも同じフォルダに存在が可能。
・何が問題か?
Linuxサーバ上のWEBアプリケーション(WordPressなど)でtop.pngをアップロードする。
そして、同じフォルダにTop.pngをアップロードする。
もちろんLinuxのフォルダ上にはtop.png、Top.png両方が保存される。
その後、WindowのFTPソフト(Dreamweaverなど)で当該フォルダをダウンロードすると、Top.pngがダウンロードされた後にtop.pngがダウンロードされ、大文字小文字で共存できないために上書きされてtop.pngしか残らなくなる。
■Windows側でWindows Subsystem for Linuxを有効化
・「プログラムと機能」を開く(winキー→appwiz.cplと入力)
・左側の「Windowsの機能の有効化または無効化」をクリック
・「Windows Subsystem for Linux」にチェックを入れる
コマンドプロンプトから
fsutil.exe file setCaseSensitiveInfo パス enable
とすることで、対象フォルダで大文字小文字の区別が可能になる。
ドキュメント内のwebというフォルダに適用するには
fsutil.exe file setCaseSensitiveInfo C:\Users\ユーザー名\Documents\web enable
となる。
ちなみに
fsutil.exe file setCaseSensitiveInfo パス
= 区別が可能かどうかを調べる
fsutil.exe file setCaseSensitiveInfo パス disable
= 区別させない設定に変更
※注意…すでに作ってあるフォルダのサブフォルダには設定は適用されないため、フォルダ毎に設定する必要がある。
※Windowsユーザー名に半角スペースが入ると動作しない。その場合はユーザー名から作り直し。
PHPで一度REST APIをサイト内に取り込み、静的ページのjsで取得することでクロスドメイン制限を回避。
log.php
$data = json_decode(file_get_contents('https://example.com/wp-json/wp/v2/posts?_embed')); foreach ($data as $value) { $title = $value->title->rendered; $link = $value->link; $year = substr($value->date, 0, 4); $month = substr($value->date, 5, 2); $day = substr($value->date, 8, 2); $date = $year . '/' . $month . '/' . $day; echo '<li><a href="' . $link . '" target="_blank">' . $date . ' ' . $title . '</a></li>'; }
javascript
function HTML_Load(_html, replace) { var xmlhttp = new XMLHttpRequest(); xmlhttp.open("GET", _html, true); xmlhttp.onreadystatechange = function () { if (xmlhttp.readyState == 4 && xmlhttp.status == 200) { var data = xmlhttp.responseText; var elem = document.getElementById(replace); console.log(elem); elem.innerHTML = data; return data; } } xmlhttp.send(null); } HTML_Load('log.php', 'id-name'); //挿入したいid名
WordPressブログから静的サイトに記事を取得し、javascriptで表示する (REST API)
No Comment html,css,php,wordpressjavascript,REST API,Vanilla JS,wordpress静的サイト(example.com)にWordpressブログ(blog.example.com)から投稿記事を取得する備忘録。
例) 他Wordpressブログから、2020年の投稿記事を10件取得して2020年1月1日以降の記事を表示。
※クロスドメイン制約により、ドメインをまたいで取得することは出来ない。
(その場合はJSONPを使うなりPHP使うなりFeedから取り込むなり)
var root = document.getElementById("id-name");//読み込み先サイトのID function getRequest(props) { var xhr = new XMLHttpRequest(); xhr.open("GET", encodeURI(props.uri)); xhr.onload = function () { if (xhr.status !== 200) { console.log('Status error'); } else { props.callback(JSON.parse(xhr.responseText)); } }; xhr.send(); } function forEach(props, callback) { for (var i = 0, max = props.length; i < max; i++) { callback(props[i], i) } } getRequest({ uri: "https://blog.example.com/wp-json/wp/v2/posts?page=1&per_page=3&after=2020-01-01T00:00:00", callback: function (posts) { forEach(posts, function (post) { var title = post.title.rendered; var link = post.link; var year = post.date.substr(0, 4); var month = post.date.substr(5, 2); var day = post.date.substr(8, 2); var newElement = document.createElement("li"); newElement.innerHTML = '<a href="' + link + '" target="_blank"><span>' + Number(month) + '/' + Number(day) + '</span><span>' + title + '</span></a>'; root.appendChild(newElement); }) } });
レンタルサーバheteml内で、新しい高性能なサーバに無料で移設出来るという事なので移設したが、その後ブログに画像がアップロードできなくなった。
エラーメッセージは
「ディレクトリ upload/2018/05 を作成できませんでした。この親ディレクトリのアクセス権はサーバーによる書き込みを許可していますか ?」
パーミッションは問題ない。
が、FTPでupload/2018/フォルダにこちらで05を作ってからアップロードしても、同じエラー。
つまりディレクトリの位置が違ってるんじゃないかと推定。
このブログはかなり前のWordpress ver.2.xくらいから使っていることもあり、パスの位置がDBに保存されていたようだ。
「アップロードするファイルの保存場所」に見事に前のサーバのパスが書かれていた。
これを削除して保存。
すると、「ファイルのアップロード」項目自体が消えた。
そういえば、Wordpress3.5からこの項目は非表示になったんだった。
Wordpressの新規インストールでは起きることはないけど、古いWPの移設案件などではまだありそうなのでメモ。
■おまけ
この消えた「ファイルアップロード」を使いたい場合は、オプションページで再設定可能。
サイトURL/wp-admin/options.php
で設定項目一覧が出るので「upload_path」で検索をかけた項目にパスを入れる。
そうすると通常の設定→メディアに上記画面と同じ形で表示される。
メモ。
<?php function add_page_menu_page() { $siteurl = 'post.php?post=xx&action=edit'; //xxに投稿idを挿入 } function add_page_admin_menu() { add_menu_page( '固定ページ表示名', '固定ページ表示名', 'read', 'post.php?post=xx&action=edit'); //xxに投稿idを挿入 } add_action( 'admin_menu', 'add_page_admin_menu' ); add_action( 'admin_head', 'custom_post_type_icon' ); function custom_post_type_icon() { ?> <style> #toplevel_page_post-post-95-action-edit .dashicons-admin-generic::before { content: "\f109";!important; //アイコンも変更 } </style> <?php