トップページphp
1001コメント288KB

【PHP】下らねぇ質問はここに書き込みやがれ 47

■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん2007/05/26(土) 21:03:53ID:???
まず読め→【PHP マニュアル】http://www.php.net/manual/ja/
PHPで最良の教本はこの公式マニュアル。市販の書籍は嘘が多いので鵜呑みにしない。
過去スレ、関連スレ、FAQなどは>>2-10辺り

◆前スレ
【PHP】下らねぇ質問はここに書き込みやがれ 45
http://pc11.2ch.net/test/read.cgi/php/1177635762/

◆質問する時の注意
・ 自分のIDを表示させること。(メール欄に何も記述しないこと。空白も入力しちゃダメ)
・ サーバーのOS(Linux、Windows他)、WebサーバーとPHPの種類やバージョン等を明記すること。
・ 己の行った操作、変更などを詳しく明記すること。
・ エラーメッセージはそのまま表記すること。「エラーが出ます」だけでは回答不可。
・ 質問者として、態度をわきまえること。
・ 事前に公式マニュアル、リファレンス本くらいはちゃんと目を通しておくこと。

◆質問後の注意
・偽者防止に必ずIDを表示させること。(メール欄に何も記述しない)
・2回目以降は最初に質問した際のレス番号を名前欄に入れること。
・解決しなくても回答をもらった場合はお礼を言うこと。
 (荒らし、煽りは除く。煽られたときも、無闇に反論せずスルーすること。)

◆回答者への注意
・誰にレスしているのか分からないと困るので、>>(アンカー)をつけて回答すること。

【その他諸注意】
・正規表現・PEAR・テンプレート(Smarty等)・フレームワークは各該当スレへ
・SQLについての質問はデータベース板(PCカテゴリ)の各スレで
0123nobodyさん2007/06/10(日) 23:25:50ID:???
>>118
正直気にする程の容量か? cronで一定期間経過後のゴミファイルを消せばいいだけじゃないかな
0124nobodyさん2007/06/10(日) 23:25:50ID:hfm7nUZI
>>122の11行目は
sqlite_escape_stringの間違いです、すみません。
SQLiteモジュール版で2系、PHPは4.4.6です。
0125nobodyさん2007/06/10(日) 23:48:15ID:???
>>123
レンタルサーバーですし
やっぱり使わないファイルがあるのは気持ち悪いかなと…
0126nobodyさん2007/06/10(日) 23:53:56ID:???
レンタルサーバーでアップローダーは転送量的に全然無理だよ。
専用鯖か自宅鯖じゃないとすぐ止められる。
0127nobodyさん2007/06/11(月) 00:47:06ID:???
>>118
自分でテンポラリファイルのシステムを作るとか
確認の時点ではtmpファイルにしておいて、決定したなら移動させる
tmpのまま残ってるのは次の投稿でチェックして消すと
0128nobodyさん2007/06/11(月) 01:37:24ID:???
>>127
やっぱり$_FILESは引っ張ったままどんどんすすめませんよね…
0129nobodyさん2007/06/11(月) 01:40:43ID:???
>>128
気持ち悪い話し方するな
0130nobodyさん2007/06/11(月) 04:04:52ID:???
くだらないこと考えてる暇あったらまず組めよ。
0131nobodyさん2007/06/11(月) 04:34:13ID:ZcbFgCno
不可解どうこうの前にまず$_POST['hoge']の中身確認しろよ
あと厳密に比較したいなら===つかとけ
0132nobodyさん2007/06/11(月) 04:43:37ID:???
普通に使ってる分にはファイルアップロードの実装がどうなってるのかはイマイチ分からんな
もしかしたらmove_upload_file()する前のtmpファイルが一定期間は残ってるのかもよ
確認して汁
0133nobodyさん2007/06/11(月) 04:48:29ID:???
マニュアルでは
>移動または名前の変更が行われていない場合、リクエストの終了時に
>そのファイルはテンポラリディレクトリから削除されます。

らしいから一旦は保存しなきゃダメかな

0134nobodyさん2007/06/11(月) 08:14:21ID:eDI3UWsO
大発明した! マジでノーベル賞かフィールズ賞もらえるかも知れん
nが素数かどうかを判別する関数書いて、借りてる鯖でとりあえず1億まで
forで回してみたらたらちゃんと動いたぜ!
0135nobodyさん2007/06/11(月) 08:20:56ID:???
>>134
・・・・質問は?
0136nobodyさん2007/06/11(月) 09:42:40ID:???
ヒント: log10(2) = 0.301...
つまりRSAでよく使う1024ビットの素数の桁は...
0137nobodyさん2007/06/11(月) 11:40:46ID:eaoXxzlR
いま、ローカルのWindowsでPHP Version 4.4.6を動かしていて、
本番サーバには4.4.7が入っているんですが、
0.0.1でもバージョンが違えば、変えたほうがいいですかね?

あと、ローカルのWindowsをバージョンアップする場合、
C:\WINDOWSにあるiniとかも新しいファイルに変えなければいけないんでしょうか?
よろしくお願いいたします。
0138nobodyさん2007/06/11(月) 11:49:06ID:???
こちらこそよろしくおねがいします。
0139nobodyさん2007/06/11(月) 11:51:54ID:???
windowsディレクトリにini入れることが間違ってる
バージョンは change log で確認して適当に判断しる
0140nobodyさん2007/06/11(月) 15:01:59ID:RNtXLFSd
日付が存在するか、調べる関数はありますでしょうか?
ない場合、皆さんはどんな方法でやりますか?
以下のようにやっているんですが、かなり無駄な処理をしている気がします…

$date = YYYYMMDD;

function date_check(&$date) {
$year = substr($date, 0,4);
$month = substr($date, 4,6);
$day = substr($date, 6);
// 分解後、生成
$new_date = date('Y-m-d', mktime(0,0,0,$month, $day, $year));
list($y,$m,$d) = split('-', $new_date);
if($year == $y && $month == $m && $day ==$d) return TRUE;
}
0141nobodyさん2007/06/11(月) 15:04:31ID:irDGLGst
$sql="INSERT INTO MARIOCHARACTERS VALUES(0,"ピーチ姫");
mysql_query($sql);
これがローカル環境だとうまくいくのにレンサバに移行したらうまくいきません。
エラーをみると、どうやらMARIOCHARACTERSが大文字であることがいけないようでした。
DBには小文字でテーブル名を登録したからです。
ローカルだと同じ条件下でうまくいったのに・・・

と思ってstrtolower($sql)を施すと、
日本語の部分が文字化けします。

sqlはコードに腐るほど書いているのですべて小文字にするには
膨大な作業時間を要します。
「テーブル名を大文字にする」以外の解決策をどなたか教えていただけませんか?
01421412007/06/11(月) 15:05:37ID:irDGLGst
すみません、最初の行は
$sql="INSERT INTO MARIOCHARACTERS VALUES(0,'ピーチ姫');";
です。
01431412007/06/11(月) 15:08:56ID:irDGLGst
>>140
checkdate($month,$day,$year)
0144nobodyさん2007/06/11(月) 15:14:43ID:eaoXxzlR
>>139
>windowsディレクトリにini入れることが間違ってる
え?そうだったっけ?
俺の環境ではうまくいってますけど・・・
0145nobodyさん2007/06/11(月) 15:15:31ID:???
>>144
Apacheの設定でiniまでのパスがあるだろ
0146nobodyさん2007/06/11(月) 15:30:13ID:RNtXLFSd
>>143さん
ありがとうございます
できました
0147nobodyさん2007/06/11(月) 15:47:03ID:???
>>141
1)[my.cnf]にlower_case_table_names=1 で起動してみる。 ただレンサバだと無理か?

2)mysql_query($sql) のラッパーを作って、そこで テーブル名を小文字に置換する処理を書く

3)dbのダンプファイルをmysqldumpで吐き出して、テーブル名を大文字に書き換える 。なんだかんだ言って一番楽か

4)一括で、ソース内を置換する。sed awkとかわからんなら、GrepReplaceとかのwindows用置換ソフト使ってみる。

のどれかか
0148nobodyさん2007/06/11(月) 16:15:17ID:22t8rr67
>>76-77
JpGraphじゃこんな細密なグラフは無理じゃまいか?
JpGraphってexcelのグラフみたいな大味なのしかできまい?
0149nobodyさん2007/06/11(月) 16:16:39ID:???
GDならできるんじゃね?
0150リガルド2007/06/11(月) 17:06:50ID:Aub30YN1
どうも。数々のスレ違いを超えてここまで来ました。どなたか掲示板のプログラムの書き方を知りませんか?
もしよければ教えてください。
0151nobodyさん2007/06/11(月) 17:10:36ID:uKFByx/1
1.PHPスクリプトaaa.phpはSEOに向きますか?
aaa.htmlみたいにhtmlファイルじゃないとSEOには向かないのでしょうか?

2.PHPスクリプトでhttp://hogehoge.com/hoge.php/aaa.htmlでアクセスしてきたら
hoge.phpでaaa.htmlを出力するのもSEOには向いてますかね?


いま会社のホームページを個人でSEOやるんですが、PHPで構築するべきか悩んでおります。
どなたかご指摘ください。よろしくお願いいたします
0152nobodyさん2007/06/11(月) 17:16:20ID:???
>>150
好きなの探せば
ttp://www.google.co.jp/search?num=30&hl=ja&lr=lang_ja&safe=off&rlz=1B3GGGL_jaJP210JP210&pwst=1&q=php+%E6%8E%B2%E7%A4%BA%E6%9D%BF+%E4%BD%9C%E6%88%90&suggest=0&sa=X&oi=cjkrefinements&ct=result&cd=1
0153nobodyさん2007/06/11(月) 17:17:11ID:HEK1r48r
$a = array('1' => 'abc', '2' => 'def', '3' => 'ghi');
foreach ($a as $b => $c) {
 print "$b と $c\n";
}

$abc = <<<ABC

ABC;

print部分を$abcdの中でループさせたいんですが、調べてみても方法がわかりませんでした。
下らない質問で恐縮ですが、どなたか宜しくお願いします・・・
0154nobodyさん2007/06/11(月) 17:19:40ID:???
>>151
apache側で mod_rewrite を使う
0155nobodyさん2007/06/11(月) 17:21:03ID:???
>>148
ワシのJpGraphは百八式まであるぞ
http://www.asial.co.jp/jpgraph/examples.php
0156nobodyさん2007/06/11(月) 17:22:59ID:???
>>153
何がしたいのか、20%くらいしか分かりません
0157nobodyさん2007/06/11(月) 17:23:58ID:???
>>153
質問の意図が不明 変数が紛らわしい、 $abcdて何を示しているのか。
0158nobodyさん2007/06/11(月) 17:28:57ID:???
>>151
.phpをはじく検索エンジンはない。だからPHPで問題ない。
特定アドレスで何を表示させるかだけ気にすればいい。

リダイレクトだとかは、物によっては減点される。
っていうか、そういうのがわからない人はSEOしようとするだけ逆効果。
01591532007/06/11(月) 17:39:56ID:HEK1r48r
>>157
すみません、$abcdじゃなくて$abcでした。

<?php
$kore = array('1' => 'abc', '2' => 'def', '3' => 'ghi');
foreach ($kore as $sore => $are) {
 print "$sore と $are \n";
}

print = <<<ABC
 <body>
  なんか文字
  <div>
  ここに表示させたい
  </div>
  なんか文字
 </body>
ABC;
?>
foreachのカッコ外に書くとループされなくて困ってます
日本語不自由で本当にすみません・・
0160リガルド2007/06/11(月) 17:42:00ID:Aub30YN1
nobodyさんどうもありがとうございました。自分にあったものを探して見ます。
0161nobodyさん2007/06/11(月) 17:43:21ID:???
PDOのqueryについて質問です。

$sth = $pdo->query($sql);
とやると$sthにはPDOStatementオブジェクトが返されるのですが
例えば結果セットが0だったとしても同じオブジェクトが返されます。

その場合、foreach内とかで結果があるかどうか判断するしかないのでしょうか?
例を以下に書くと

foreach($pdo->query($sql) as $value){
  $result = true;
}
if(!$true) exit;

と、書くのはあまりスマートじゃない気がするのですが…
01621612007/06/11(月) 17:43:47ID:Qju5bIjI
すいません、ID出し忘れました。
0163nobodyさん2007/06/11(月) 17:44:07ID:???
>>159
print = <<<ABC
 <body>
  なんか文字
  <div>
ABC;
foreach ($kore as $sore => $are) {
 print "$sore と $are \n";
}
print = <<<ABC
  </div>
  なんか文字
 </body>
ABC;
0164nobodyさん2007/06/11(月) 17:46:09ID:???
>>161
PDOStatementの中見て判定すればいいのでは?
0165nobodyさん2007/06/11(月) 17:47:43ID:Qju5bIjI
>>164
そうしようと思ったのですが、var_dumpで見ても全く同じなので困っているのです。
0166nobodyさん2007/06/11(月) 17:49:24ID:???
>>161
下記の例1745をどうぞ。
http://jp.php.net/manual/ja/function.PDOStatement-rowCount.php
0167nobodyさん2007/06/11(月) 17:51:03ID:Qju5bIjI
>>166
なるほど、大変参考になりました。
ありがとうございます。
0168nobodyさん2007/06/11(月) 18:18:51ID:???
>>159
<?php
$kore = array('1' => 'abc', '2' => 'def', '3' => 'ghi');

function hoge($kore){
foreach ($kore as $sore => $are) {
 print "$sore と $are \n";
}
}
?>

 <body>
  なんか文字
  <div>
<?php
hoge($kore);
?>
  ここに表示させたい
  </div>
  なんか文字
 </body>
0169nobodyさん2007/06/11(月) 18:27:32ID:NlNPG8R0
include("ks1\sm.php");
if($fp >= 1) {$on1="1";}else {$of1="1";}

include("ks2\sm.php");
if($fp >= 1) {$on2="2";}else {$of2="2";}

でループを作るため変数で数字を変えようとしたのですが

include("ks○\sm.php");
if($fp >= 1) {$on●="○";}else {$of●="○";}

○の部分は変数で指定する事が出来たのですが●の部分を
変数で指定する事ができません、つまり 

$a=1; としたときに
include("ks$a\sm.php");
if($fp >= 1) {$on$a(ここと)="$a";}else {$of$a(ここが指定できない)="$a";}

$on1と$of1の中身に値を入れることができない


どうすればうまく行くのでしょうか・・・
こんな質問で恐縮ですが、どなたか宜しくお願いします
0170nobodyさん2007/06/11(月) 18:30:25ID:???
1.配列を使う
2.可変変数を使う

オススメは1
01711692007/06/11(月) 18:33:19ID:???
>>170
わかりましたありがとうございます
スレ汚し失礼しました
0172nobodyさん2007/06/12(火) 02:33:14ID:UZQhzfQf
nameが「test」のテキストエリアの中身を取得したいときに
preg_match('/<textarea(.*)name="after"(.*)>(.*)<\/textarea>/s',$str,$match);
としたのですが、何もマッチしませんでした。
HTMLに色々あって、name="after"のテキストエリアがあるのですが、
どのようにマッチさせれば良いのでしょうか?
01731722007/06/12(火) 02:48:13ID:UZQhzfQf
'/<textarea cols=36 rows=15 name="after".*?>(.*)<\/textarea>/si'
で事故解決しました
0174nobodyさん2007/06/12(火) 02:59:48ID:???
>>171
スレは汚すためにつかうもの
0175nobodyさん2007/06/12(火) 07:08:37ID:???
>>159
<?php
$hyouji = "";
$kore = array('1' => 'abc', '2' => 'def', '3' => 'ghi');
foreach ($kore as $sore => $are) {
 $hyouji .= "$sore と $are \n";
}

print <<<ABC
 <body>
  なんか文字
  <div>
  $hyouji
  </div>
  なんか文字
 </body>
ABC;
?>
0176nobodyさん2007/06/12(火) 11:45:43ID:PUVkyguw
今とある本で、「スコープ演算子」という章をやっています。:: と static の使い方を説明しています。
staticで宣言されたメソッド、プロパティなどは、オブジェクトではなくクラスの持ち物と書いてあります。

Circleクラスを定義します。その中に public static $color; というプロパティ宣言と
public static functions setColor($color); public function getColor(); public __get($prop)というメソッドを定義します

そして オブジェクト生成で$redCircle = new Circle();とします。
そうすると$redCircle->getColor()とするとプロパティは存在しない(static宣言されているのでオブジェクトの持ち物ではないから)
とちゃんとなるんですが、static宣言したメソッドsetColorは使用できてしまいます。
$redCircle->setColor($color);とすると$colorプロパティに値が設定されてしまいます。
ちなみに __call($func, $param)メソッドを定義してみてもエラーメッセージは表示されませんでした。

なぜ、static宣言された、プロパティの場合だとオブジェクトの持ち物ではないことになり(プロパティを使用できない)、
メソッドの場合だとオブジェクトの持ち物になってしまう(メソッドをしようできる)ことになってしまうのでしょうか?

冒頭にも書きましたが、static宣言されたプロパティ・メソッドはクラスの持ち物だと書かれています。
static 宣言されたメソッドがオブジェクトから使用できるのが納得できませんし、ましてや$colorプロパティをその中で
使っています。全然、理解できません。。お願いします。
01771762007/06/12(火) 11:48:18ID:PUVkyguw
ちなみにvar_dump($redCircle)で出力したところ、空のものが帰ってきます。
もう、ワケワカメです。(-人-)分かる人、お願いします。
0178nobodyさん2007/06/12(火) 11:51:48ID:???
>>176
そいういうものだとしかいいようがないな。なんか一貫性がなかったり
間違ってるように思えるのはPHPを作った奴が(ry
0179nobodyさん2007/06/12(火) 11:56:48ID:???
>>176
長々説明するより、問題のコード書いてくれよ
0180nobodyさん2007/06/12(火) 11:59:49ID:tW89iOYP
strip_tagsを使ってテキストからHTMLタグを削除するものを作ったのですが
メールのあて先などと同じ書き方
ホゲホゲ<hoge@>などの記載がある場合に
メールアドレスの部分もきっちり削除されてしまって
困っています
strip_tagsの機能はそのままに上記のような書き方の場合のみ
strip_tagsを適用しないようにするにはどのようにしたらいいのでしょうか?
01811762007/06/12(火) 12:07:56ID:PUVkyguw
>>178
どうもありがとうございます。そういうものと割り切ります。

>>179
すみません。長文で。。コードを次に載せます。
01821762007/06/12(火) 12:09:15ID:PUVkyguw
<?php
// クラスプロパティ、クラスメソッドを持つクラス
class SameColorCircle {
// クラスプロパティ
public static $color;

public function __call($func, $param) {
echo "$func は存在しないメソッドです\n";
}

// クラスメソッド
public static function setColor($color) {
self::$color = $color;
}

// オブジェクトのプロパティチェック
public function __get($prop) {
return "$prop というプロパティは存在しません";
}

// クラスプロパティの色を返す
public function getColor() {
return self::$color;
}

}
01831762007/06/12(火) 12:10:55ID:PUVkyguw
// 赤い円の作成
$redCircle = new SameColorCircle();
$redCircle -> setColor("red");


// 赤い円の色を調べる
print("オブジェクトのプロパティ = {$redCircle->color}\n");
print("色は = {$redCircle->getColor()}\n");

$blueCircle = new SameColorCircle();
$blueCircle -> setColor("blue");

print("redCircleの色は = {$redCircle->getColor()}\n");
print("blueCircleの色は = {$blueCircle->getColor()}\n");
var_dump($redCircle);
var_dump($blueCircle);
?>
0184nobodyさん2007/06/12(火) 12:12:57ID:???
>>180
<hoge@example.com> なんつー記述があるファイルはそもそも正しいHTMLとは言えなくない?
正しくない入力だから正しくない出力がでるのはこれは当り前。
<>を実体参照にするか、strip_tagsの第二引数を使うかどっちかじゃないかな。
0185nobodyさん2007/06/12(火) 12:20:56ID:tW89iOYP
>>184
すみません自己解決できました
メール云々以前にタグがありそれで消えていました
ありがとうございます
0186nobodyさん2007/06/12(火) 13:01:59ID:???
>>183
クラスの持ち物なんだからオブジェクトから使用できて当然だろう
0187nobodyさん2007/06/12(火) 13:03:57ID:???
つか、オブジェクトじゃなくてインスタンスな
0188nobodyさん2007/06/12(火) 13:19:56ID:???
>>186
待て待て普通は使えんぞ。
クラスメソッドはインスタンスメンバを操作出来ないんだから
インスタンスからアクセスする必要性もない。
0189nobodyさん2007/06/12(火) 13:50:16ID:T005GIRY
レンタル画像庫作っています。
すべてのデータは直リンク防止のため、ファイルをpublic_html以上のディレクトリに置き、
DBにてナンバーと画像形式を保管して管理して出力はPHPファイルからの出力としているのですが、以下の点で悩んでおります。

ユーザーが画像庫のファイルを削除する際、削除ボタンを押したらその処理として該当のDBのデータ・画像ファイルを消去するのと
削除フラグをオン(表示できないように)にしておいて画像ファイルは定期的にCRONで削除するのではどちらが一般的(ユーザビリティの面でも)で良いでしょうか?
01901762007/06/12(火) 13:55:42ID:PUVkyguw
みなさん、どうもありがとうございました。なんというか、よくわかりませんが、
こういうものだと思って、進めていきます。ちょっと違和感がありますね。
0191nobodyさん2007/06/12(火) 14:01:23ID:???
>>189
それぞれのメリット・デメリットを挙げてみ
0192nobodyさん2007/06/12(火) 14:21:51ID:T005GIRY
>>191さん
レスありがとうございます。
私の考えになるのですがメリット・デメリットはこんな感じになるかと思います。

その場で削除する場合
デメリットはユーザーに多少の時間ロスを強いることになる(一気にたくさん消す場合は特に)
メリットは私が不得意なCRONを使う必要がないw
また、全体的には負荷の均一化ができるかも…

CRONで消す場合
メリットはユーザーに最小限の時間ロス
また、「間違えて消した」等のトラブルに対応できる
デメリットは
いっぺんに消す時間帯は負荷によりユーザーに負担
CRONをしっかり勉強する必要がある(楽しみでもあり、鬱でもあり)
0193nobodyさん2007/06/12(火) 14:30:23ID:???
>>189
「誤って削除してしまったのだが、復活しろ」 とか言うユーザがどの程度居るかによる と思う。

削除する時に、復活出来ない旨を同意させておいて、速攻unlinkでもいいような気がするが。
0194nobodyさん2007/06/12(火) 14:31:04ID:LvjJxiWS
Shift_JISでecho "予"を記述したらエラーになりますよね。
でもformから予を送信してechoで$_POSTの中の予を表示させたらちゃんと画面で出力されるんです。
この違いがわかりません
0195nobodyさん2007/06/12(火) 14:37:56ID:???
削除フラグつけて、一定時間空いたら削除ボン!でいいんじゃね?
0196nobodyさん2007/06/12(火) 15:01:14ID:wlBONLAG
ここで質問しても良いでしょうか?

osCommerceというショッピングカートを利用しようとしています。
商品内容の登録項目数が少ないので、追加したいのですが、こういう質問はどこでしたら良いでしょうか?
または、「このサイトを見ろ!」的な回答があればお願いします。
https://sourceforge.jp/projects/tep-j/forums/
こちらのサイトは見ましたが、うまく発見できず、同じような質問が過去にあったのですが、レスが付いていませんでした。


以上、誘導その他お願いします。
0197nobodyさん2007/06/12(火) 15:10:23ID:???
そこのサイトで質問しろよバカ
0198nobodyさん2007/06/12(火) 15:23:41ID:???
なんだとこのやろう
0199nobodyさん2007/06/12(火) 15:30:49ID:???
>>196
スレ違い。あと、自分で検索で見つけられない位なら、
osCommerceのソースを解析して改造するのは厳しいと思った方がいい。金払って外注した方がいいかと。
0200nobodyさん2007/06/12(火) 15:34:26ID:r99QbufC
ディレクトリが存在している場合はそのディレクトリを使用し、存在しない場合は新しく作るコードで

if (!@opendir(./datadir/)) {
mkdir ("./datadir/", 0700);
}

とやればいいらしい所までたどり着いたのですがopendir関数は、
closedir関数とセットで使わないといけない気がしているんです(fopenとfcloseのノリ)
↑が質問の内容

ひょっとするとこのコードはディレクトリの存在を確認(なければ作成)するためだけにあるのでしょうか?

ここを参考にしました
ttp://www.google.com/codesearch?hl=en
ttp://wspri.dip.jp/index.html?mainframe/main/php/howto/file.html
0201nobodyさん2007/06/12(火) 15:42:25ID:???
>>200
素直にis_dir を使えば?
0202nobodyさん2007/06/12(火) 15:47:10ID:r99QbufC
>>201
ディレクトリがないときは作りたいのですが
作るとclosedirを使わないといけないのか? というのが質問の趣旨なんですけど
0203nobodyさん2007/06/12(火) 15:52:04ID:???
>>202
is_dir()を使うべき所でopendir()を使う必要がない。
mkdir()でディレクトリハンドルは開かない。
0204nobodyさん2007/06/12(火) 16:01:40ID:r99QbufC
これについて言いたいのは分かる
<?php
$dir = "/etc/php5/";

// 既知のディレクトリをオープンし、その内容を読み込みます。
if (is_dir($dir)) {
if ($dh = opendir($dir)) {
while (($file = readdir($dh)) !== false) {
echo "filename: $file : filetype: " . filetype($dir . $file) . "\n";
}
closedir($dh);
}
}
?>

知りたいのはディレクトリが存在しないとき作成する方法
>>203
ディレクトリハンドルはopendirで開いてないか? という質問なんですが
0205nobodyさん2007/06/12(火) 16:05:31ID:???
┐(´ー`)┌ コイツワケワカンネ
0206nobodyさん2007/06/12(火) 16:09:02ID:???
>>204
開かない、falseが戻ってくる。つうかそこまでわかっているなら
ttp://jp.php.net/manual/ja/function.opendir.php

の戻り値をまず見てみろよ
0207nobodyさん2007/06/12(火) 16:12:06ID:r99QbufC
訳分からん質問投下してすまん
でもみんなサンクス
0208nobodyさん2007/06/12(火) 16:14:20ID:???
>>204
だから存在しなければ作るには
if(is_dir($dirpath)) mkdir($dirpath);
とするべきで、そのopendir()の使い方は規格外だから、
ディレクトリを閉じる閉じないで悩む必要はないと言ってるんだが。
存在するディレクトリにopendir()を使って閉じない場合は(変数に保持しなくても)
スクリプトの終了まで開きっぱなしになるがな。
02092082007/06/12(火) 16:19:17ID:???
おっと!が抜けた
if(is_dir($dirpath)) mkdir($dirpath);
 ↓
if(!is_dir($dirpath)) mkdir($dirpath);
な。
0210nobodyさん2007/06/12(火) 16:19:44ID:r99QbufC
>>208
把握
0211nobodyさん2007/06/12(火) 16:27:36ID:???
ちなみに
mkdir($dirpath, 0777, true);
ってやっても同じことができるけどね
0212nobodyさん2007/06/12(火) 16:43:05ID:???
>>211
それはパス中のディレクトリが存在していなくても全てのディレクトリを作るためのオプションで
ディレクトリが存在しないときだけ作るオプションではないが。
0213nobodyさん2007/06/12(火) 16:44:29ID:???
結局同じことが実現できるんだからいいんじゃないの?
0214nobodyさん2007/06/12(火) 16:57:59ID:???
>>213
全然同じことじゃない。
第3引数trueで行うのは作成先の上位ディレクトリが存在しない場合でもその上位ディレクトリを全て作ること。
作成するディレクトリ(第3引数trueでは最下層ディレクトリ)が存在する場合はどのみちエラーになる。
0215nobodyさん2007/06/12(火) 17:29:36ID:???
safe modeだと不具合出るしね
0216nobodyさん2007/06/12(火) 17:38:57ID:???
>>214
あースマソ
mkdir -p と同じ意味かと勘違いしてた
上位ディレクトリを作るかどうかは、ここではどっちでもいいと思うけど
2段階以上存在しないディレクトリ作るなら、is_dirでfalse返った後のmkdirも失敗するし
0217nobodyさん2007/06/12(火) 17:49:09ID:1K2o2XiZ
QuickFormでユーザー登録する部分を作っているんだけど
addRuleで以下の条件はどうやって記述すればいいですか
 項目usernameはDB内に重複してはいけない
 項目usernameはドット(.)を使用してはいけない
お願いします
0218nobodyさん2007/06/12(火) 19:17:34ID:???
まあ
if(!is_dir($path)) mkdir($path,0755,TRUE);
が最強ということだね。
0219nobodyさん2007/06/12(火) 21:24:26ID:???
>>217
>項目usernameはDB内に重複してはいけない
独自ruleをつくれ

>項目usernameはドット(.)を使用してはいけない
regex使え
0220nobodyさん2007/06/12(火) 21:45:49ID:???
>>218
先生!!
$pathが存在し かつ ディレクトリじゃない場合の対応が抜けてると思います
0221nobodyさん2007/06/12(火) 22:00:52ID:???
>>220
考えてみたが必要なくね?
dirってディレクトリが存在しなく、dirというファイルが存在する場合に
mkdirでdirというディレクトリ生成してもファイルには何も影響ないと思うんだが
0222nobodyさん2007/06/12(火) 22:11:40ID:???
>>220
厳密にいうと、そうかもしれんが、そもそもそういう状態になってしまっている段階で、

ソースの設置ミス or 予約領域の名前と同名のファイルがユーザ側で作成できてしまう
というバグにあたるから、この部分では不要に思えるけどね。
■ このスレッドは過去ログ倉庫に格納されています