CakePHP Ver1.3.6で開発をしています。

アクションの中で、画像の存在判定にfile_exists関数を使ったのですが、
2バイトのファイル名のファイルの場合、存在するファイルがfalseになって
しまいます。

対象のファイルが存在するときに、

if (file_exists('img/漢字.jpg')) echo 'あります';
else echo 'ありません';

if (file_exists('img/filename.jpg')) echo 'あります';
else echo 'ありません';

このとき、前者は’ありません’、後者は’あります’と表示されます。

app/webrootフォルダにtest.phpを作り、その中で同じ判定をすると、
両方とも’あります’と表示されます。

なぜアクションの中に記述したときのみ、2バイトファイル名を正しく
判定できないのでしょうか?

このQ&Aに関連する最新のQ&A

A 回答 (1件)

文字コードは統一できていますか?



・システム側で、ファイルシステムに使われている文字コード
・PHPファイル中でファイル名の指定に使っている文字コード

この二つが一致していないと、一見同じに見えても文字コードのバイト列レベルでは別の文字列になり、「ありません」と判定されることになります。

おそらく、たまたまtest.phpの方はファイルシステムと同じ文字コードで記述されているだけなのではないかと思います。
    • good
    • 0
この回答へのお礼

ありがとうございました。おっしゃる通りでした。実に基本的なところを見落としていて、恥ずかしいです。

いついもLinux上での開発をしていたところ、今回WindowsのXAMPPでの開発に移ったことが原因のようです。

ありがとうございました。

お礼日時:2011/04/08 17:09

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Q以下の文章のto and parties 以降の構造がわかりません。

以下の文章のto and parties 以降の構造がわかりません。
exports to states, countries, and parties という構造だと思ったのですが、違いますよね?
どう捉えるべきでしょうか?

The policy dates back to 1967, when Eisaku Sato, the prime minister at the time, declared a ban on weapons exports to communist states, countries to which the United Nations bans such exports to and parties to international conflicts.

引用元
http://search.japantimes.co.jp/cgi-bin/nn20100725a2.html

よろしくお願いします。

Aベストアンサー

「武器輸出の禁止を宣言した」
とあり,それがどこの国へかが
to
communist states「共産国家」
countries to which the United Nations bans such exports to
「国連が武器輸出を禁じている国」
parties to international conflicts「国際紛争への当事者→国際紛争の当事国」

こうしてみると,やはり to が一つ余計ですね。
countries (which) the United Nations bans such exports to
が正しいです。

QPHPのfile_exists関数について

file_existsで特定のフォルダにファイルが存在するかどうかを調べたいのですが、
フォルダの中にあるファイル数が大量の場合、負荷はファイル数に応じて大きくなるんでしょうか?

たとえば、ファイルが5万件ある場合でも、file_exists関数は問題なく使えるんでしょうか?
あるいは、mysqlなどのデータベースを利用した方が賢明でしょうか?

よろしくお願いいたします。

Aベストアンサー

検証したわけでは、無いので予想ですいません。

まずファイルが5万件あるディレクトリでlsなど叩いた場合、
かなり時間がかかってしまいます。
OSレベルでもその状況なので、ソフトウェア側でも、時間が
かかると予想します。

ファイル自体1ディレクトリにある必要がないと思うので、
ファイル数が増える場合は大抵、以下のようにファイルを
1000件など適当な数で振り分ける仕組みを作ったりします。

0/0/0 ~ 999
0/1/0 ~ 999


QI find parties like that ......

NHKラジオ英会話講座より
Everyone seemed to have a great time,myself included.
Although I find parties like that quite exhausting.
・・省略・・、ああいうパーティーはかなり疲れるけど。

(質問)I find parties like that quite exhausting.についてお尋ねします。
(1)第5文型(SVOC)でしょうか?
a)I (S)
b)find (V)
c)parties like that (O)
d)quite exhausting. (C)
(2)likeは前置詞ですか?
(3)findのフィーリングは日本語にするとどんな感じですか?やはり、見つける、わかる、ですかね? 類似の例文をお願いできれば・・?
 やさしい説明をお願いいたします。よろしくお願いいたします。以上

Aベストアンサー

こんにちは。

ご質問1:
<(1)第5文型(SVOC)でしょうか?>

その通りです。分類も合っています。


ご質問2:
<(2)likeは前置詞ですか?>

その通りです。

1.名詞thatを受けて、like thatで「あのように」「あのような」という意味になります。ここでは「ああいう(パーティ)」の部分に相当します。

2.この前置詞句は、すぐ前の名詞partiesにかかる形容詞句になります。


ご質問3:
<(3)findのフィーリングは日本語にするとどんな感じですか?やはり、見つける、わかる、ですかね?>

ここでは「と思う」という訳が適切です。

1.元々は「見つける」という意味ですが、第5文型の構文で使われると、「~とわかる」「~だと思う」といった訳になります。

2.なお、ここで使われているexhaustingは、他動詞のexhaust「~を疲れさせる」の現在分詞で、「(人を)疲れさせるような」という能動の意味があります。

3.以上から、ご質問文の訳出の流れは
(直訳)「私は、あのようなパーティを、かなり人を疲れさせるようなもの、だと思う」

(意訳)「あんなパーティは、かなり疲れると思う」
となり、これが抄訳のような訳になっているのです。


ご質問4:
<類似の例文をお願いできれば・・?>

1.ご質問文に即したもっとも分かり易い例文は
I find the book interesting.
「その本を、面白いと、思う」
です。同じくSVOCの第5文型です。

このinterestingもinterest「(人を)面白がせる」という他動詞の現在分詞なので、その意味を踏まえて「面白い」という訳になります。

ここでもfindは「~と思う」の意味で使われています。

2.この文をご質問文により忠実に再現すると
I find the book like that quite interesting.
「ああいう本は、かなり面白いと思う」
となります。

以上ご参考までに。
tommyさんはNHKのテキスト以外に何か参考書などをお使いですか?

こんにちは。

ご質問1:
<(1)第5文型(SVOC)でしょうか?>

その通りです。分類も合っています。


ご質問2:
<(2)likeは前置詞ですか?>

その通りです。

1.名詞thatを受けて、like thatで「あのように」「あのような」という意味になります。ここでは「ああいう(パーティ)」の部分に相当します。

2.この前置詞句は、すぐ前の名詞partiesにかかる形容詞句になります。


ご質問3:
<(3)findのフィーリングは日本語にするとどんな感じですか?やはり、見つける、わかる、ですかね...続きを読む

Qfile_exists('http://192.168.0.9/x.php');

が機能しません
file_exists('/var/www/html/x.php');
(FC4を使っている)

include('http://192.168.0.9/x.php');

機能します
どうしたら
file_exists('http://192.168.0.9/x.php');
も機能するようになるでしょうか?
file_existsの引数がURLのときにも機能するようにするにはどうすればよいのでしょうか?

Aベストアンサー

>どのラッパーが stat() ファミリーをサポートしているか
http://jp.php.net/manual/ja/wrappers.http.php
によるとHTTP プロトコルで stat( ) は、サポートしていないようです。
ファイルが存在するかどうかだけなら、fopen でオープンできるかどうかで代用できるような気がします。

Q契約書英語 parties to the contract

(1) The parties to the contract must be legally competent;

上記の文について質問です。「契約当事者が法的な資格を備えていること。」という意味だと思うのですが、"parties to the contract"の部分のtoがしっくりきません。"parties in the contract"ではなくて、toなのは何故ですか?また、inだと間違い/不自然ですか?

(2) It must be in writing if a written document is required for that kind of contract.

手元にある日本語訳が、「契約の種類に応じて書面契約が要求される場合は、書面で作成されること。」となっています。

"that kind of contract"の部分が、「契約の種類に応じて」となっているのですが、何故このような訳になるのですか?「その種の契約が必要な場合」だと思ったのですが・・・。

また、ここは、英語とは離れてしまうのですが、署名契約が要求されたら、書面で作成されるのは当たり前だと思うのですが、わざわざ定義するほどのことなのでしょうか?

以上

よろしくお願いします。

(1) The parties to the contract must be legally competent;

上記の文について質問です。「契約当事者が法的な資格を備えていること。」という意味だと思うのですが、"parties to the contract"の部分のtoがしっくりきません。"parties in the contract"ではなくて、toなのは何故ですか?また、inだと間違い/不自然ですか?

(2) It must be in writing if a written document is required for that kind of contract.

手元にある日本語訳が、「契約の種類に応じて書面契約が要求される場合は、書面で...続きを読む

Aベストアンサー

>parties in the contract"ではなくて、toなのは何故ですか?
決まり文句ですから、「何故ですか」と言われると困ってしまいます。

>また、inだと間違い/不自然ですか?
inだと不自然です。少なくとも「契約当事者」の意味で使っているなら、間違いと言わざるを得ないでしょう。

>"that kind of contract"の部分が、「契約の種類に応じて」となっているのですが、何故このような訳になるのですか?
直訳すると「その種類の契約について書面による文書が要求されている場合は、それは書面によらなければならない」ということです。
「契約の種類に応じて」という訳は少し意訳気味ですが、間違いではないと思います。

>署名契約が要求されたら、書面で作成されるのは当たり前だと思うのですが、わざわざ定義するほどのことなのでしょうか?
おっしゃるとおり、一読した限りでは至極当り前のことしか言っていないので、「こんなの、わざわざ書かなくても良いだろう」と思わないでもありません。

ただ、契約を書いた人の意図を推測すると、
「(うちの社内規定で)その種類の契約について書面による文書が要求されている場合は、それは書面によらなければならない」とか
「(法律で)その種類の契約について書面による文書が要求されている場合は、それは書面によらなければならない」のような意味だったのかもしれません。

前者の場合、この規定がなければ、元来相手側には書面による文書を作成する義務がなかったことになります。
後者の場合、この規定によって法律上の義務だけでなく契約上の義務も課されるので、相手に違反があったときには(損害があれば)損害賠償を請求できるようになります。

いずれにしろ、かなり言葉足らずではあると思います。

>parties in the contract"ではなくて、toなのは何故ですか?
決まり文句ですから、「何故ですか」と言われると困ってしまいます。

>また、inだと間違い/不自然ですか?
inだと不自然です。少なくとも「契約当事者」の意味で使っているなら、間違いと言わざるを得ないでしょう。

>"that kind of contract"の部分が、「契約の種類に応じて」となっているのですが、何故このような訳になるのですか?
直訳すると「その種類の契約について書面による文書が要求されている場合は、それは書面によらなければ...続きを読む

Qループ処理された中でfile_existsによる画像サイズが取得できま

ループ処理された中でfile_existsによる画像サイズが取得できません。
ループlist関数で変数代入しDisp_Img_Tag_02関数へ引数を渡した場合に引数側へ変数は渡っていることは確認しているのですが、問題解決に至りません。コードの問題指摘と解決方法をアドバイスください。
ログファイル/  1,ばなな,黄色いくだものです,1278105473-01.jpg

<?php
$logfile = "./db.csv"; //ログデータ
$array_log = file($logfile);
for($i=0; $i<count($array_log); $i++){
list($code,$text_01,$area_01,$img_01_Filename) = split(",", $array_log[$i]);
echo Disp_Img_Tag_02("1278105473-01.jpg")."<br>"; //(1)直接ファイルを指定
echo Disp_Img_Tag_02("$img_01_Filename")."<br>"; //(2)***ここが問題です。
}
echo "<br><br>";

$img_01_Filename = "1278105473-01.jpg";
echo Disp_Img_Tag_02("1278105473-01.jpg")."<br>"; //確認用OK
echo Disp_Img_Tag_02("$img_01_Filename")."<br>"; //確認用OK

function Disp_Img_Tag_02($img_name, $type) {
$path = realpath( "." )."/img/"; //アップロード画像パス
$up_dir = '/img/'; //画像リンク先パス
$w_admin_max = 30; //管理用サイズ
$h_admin_max = 30;
$w_user_max = 100; //ユーザー用サイズ
$h_user_max = 100;
$img_tag = "";

if($img_name && file_exists("$path$img_name")){
list($width, $height, $dummy01, $dummy02 ) = getimagesize("$path$img_name");

if($width > $w_admin_max || $height > $h_admin_max){
$w_rate = $w_admin_max / $width;
$h_rate = $h_admin_max / $height;
($w_rate < $h_rate) ? $key = $w_rate : $key = $h_rate;
$width = (int) $width * $key;
$height = (int) $height * $key;

$img_tag = $img_tag."<a href=.$up_dir$img_name target=_blank><img src=.$up_dir$img_name width=" . $width . " height=" . $height . " border=0></a>\n";
}else{
$img_tag = $img_tag."<img src=.$up_dir/$img_name border=0>\n";
}
$img_tag = $img_tag."<input type=hidden name=fname01 value=\"$img_name\"><input type=checkbox name=fname01_del value=1>削除\n";
$img_tag = $img_tag." 上書:<input type=file name=upfile01 size=15>\n";
}else{
$img_tag = $img_tag."登録 <input type=file name=upfile01 size=20> 確認用ファイル名 $img_name\n";
}
return $img_tag;
}
?>

ループ処理された中でfile_existsによる画像サイズが取得できません。
ループlist関数で変数代入しDisp_Img_Tag_02関数へ引数を渡した場合に引数側へ変数は渡っていることは確認しているのですが、問題解決に至りません。コードの問題指摘と解決方法をアドバイスください。
ログファイル/  1,ばなな,黄色いくだものです,1278105473-01.jpg

<?php
$logfile = "./db.csv"; //ログデータ
$array_log = file($logfile);
for($i=0; $i<count($array_log); $i++){
list($code,$text_01,$area_01,$img_01_Filename)...続きを読む

Aベストアンサー

[quote cite="http://jp.php.net/manual/ja/function.file.php"]
ファイルを配列に入れて返します。 配列の各要素はファイルの各行に対応します。[b]改行記号はついたままとなります。[/b] 失敗すると file() は FALSE を返します。
[quote]

QI honestly don't like parties too much.

誰か英人のエッセー文かと思うのですが、上記タイトル以下の文を読むと、作者がパーティーを嫌う理由が色々書かれていて、作者がパーティーを心底嫌っていることが伺えます。
とするとタイトルにある英文は、「正直言うと、私はパーティーは全く好きじゃない」と訳していいのでしょうね?

それから
1.I don't like parties very much.
2.I don't like parties so much.
上記のような英文に出くわした場合、英文を書いた人はどのような気持ちを持っていると考えられますか?
また、日本語での「パーティーは余り好きじゃない」というニュアンスを含みたい場合の英語はどのように表現されますか?

以上宜しくお願い致します。

Aベストアンサー

very muchやso muchはどちらかといえばpositiveな時に使います。

一方too muchはnegativeですね。tooは過剰な表現です。
=I hate parties.
好きではないけど、それほど嫌いでもないというような表現の時に
I don't like parties very much. になるでしょう。

Qfile_existsでファイル名の部分一致で検索

PHPの勉強中なのですが、指定フォルダにあるファイルを、部分一致で存在チェックしたいのですが、file_existsでは、正規表現とかは使えないのでしょうか?
それとも、readdirでファイル一覧を取得して、そこから検索して存在チェックするのでしょうか?

Aベストアンサー

globを使ってもいいかと思います。戻り値は配列です(マッチするファイル名がなければ空の配列が返ります)。

http://php.net/manual/ja/function.glob.php

Q英文契約書のparty/partiesの和訳について教えてください

以下は3社間の英文契約書の抜粋です。

partyとpartiesをどのように訳し分ければよいでしょうか?
A, B, and C may be individually referred to herein as a Party or Company and collectively referred to as the Parties or the Companies.

恐れ入りますが、どなたかお助けください。

Aベストアンサー

訳し方は、NO.3の方のとおりです。
蛇足ですが、今回のように最初が大文字の場合は、「当事者」又は「全当事者」のようにカギ括弧をして、これらの当事者以外の当事者として現れる可能性がある小文字の当事者(party)やその他の会社(company)と区別することをお勧めします。

Q【file_exists】ファイルが存在するのに、存在しないとなります

いつもお世話になっております。
■環境■
PHP5 Windows
■状況■
フォルダ内にtextファイルが20~45個入っております(個数は状況によって変わります)。
■目的■
フォルダのtextファイルの中身を参照し、各textファイルに必ず含まれる数字を取り出す。でございます。

■方法■
(1)フォルダにあるファイル名を取りだす
(2)fopenで読み込み(r)で全部を見、数字を別ファイルに書き込む

と考えたのですが、(1)で.、..というよくわからないファイルも一緒に出てきてしまったので、file_existsでファイルが存在するか確認してから(2)に移ろうとお思いました。
が、ファイル名は全部ないといわれてしまうのです。
しかしfile_exists($filename)の$filenameを表示させ、ブラウザにこぴぺするとtextデータは出てきます。

以下プログラムの一部です
※$cは(1)で得たフォルダ内にあるファイル名をループでまわしている値です

for($b=0;$b<$a;$b++){
 $filename="C:/Inetpub/wwwroot/php/kore/1/".$c;
if (file_exists($filename)) {
print "あるよ<BR>";
} else {
print "ないよ<BR>";
}
}

結果は(一部です)
C:/Inetpub/wwwroot/php/kore/1/.text⇒ないよ
C:/Inetpub/wwwroot/php/kore/1/..text⇒ないよ
C:/Inetpub/wwwroot/php/kore/1/0155442A5.txt⇒ないよ
C:/Inetpub/wwwroot/php/kore/1/01762602A.txt⇒ないよ
です。
上記の
C:/Inetpub/wwwroot/php/kore/1/01762602A.txt
C:/Inetpub/wwwroot/php/kore/1/0155442A5.txt
は確実に存在しております。

どこがおかしいのか、ご教授いただければ幸いです
よろしくお願いいたします

いつもお世話になっております。
■環境■
PHP5 Windows
■状況■
フォルダ内にtextファイルが20~45個入っております(個数は状況によって変わります)。
■目的■
フォルダのtextファイルの中身を参照し、各textファイルに必ず含まれる数字を取り出す。でございます。

■方法■
(1)フォルダにあるファイル名を取りだす
(2)fopenで読み込み(r)で全部を見、数字を別ファイルに書き込む

と考えたのですが、(1)で.、..というよくわからないファイルも一緒に出てきてしまったので、file_exists...続きを読む

Aベストアンサー

直接の回答ではありませんが、「.」や「..」という名前が出て来るということは、scandirやopendirしてreaddirでファイル名の一覧を取得しているということですよね。

一覧すべてを取得するのではなく、目的とするファイルのみ一覧で取得できるglobを使う方が便利ではないかと思います。たとえば glob("*.txt") を実行すれば、拡張子がtxtのファイルの一覧を返してくれます。

file_existsがtrueで返らない理由については、他の方もおっしゃっているとおり、まず渡しているファイル名が本当に思っているものなのかどうかを確認してみた方が良いと思います。ありそうなのは、$c にディレクトリ名の一部が入っている、とか。


人気Q&Aランキング

おすすめ情報