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

【PHP】くだらねぇ質問はここに書き込みやがれpart8

■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん2005/08/08(月) 01:18:55ID:54u1h4+D
PHPに関するくだらない質問用すれです。
ここなら本スレで回答のないお前の下らない質問に回答があるかも知れません。
次スレは>>970あたりが建てて下さい

・過去スレ
【PHP】くだらねぇ質問はここに書き込みやがれ
http://pc5.2ch.net/test/read.cgi/php/1099322141/
【PHP】くだらねぇ質問はここに書き込みやがれpart2
http://pc5.2ch.net/test/read.cgi/php/1105218084/
【PHP】くだらねぇ質問はここに書き込みやがれpart3
http://pc5.2ch.net/test/read.cgi/php/1107780435/
【PHP】くだらねぇ質問はここに書き込みやがれpart4
http://pc8.2ch.net/test/read.cgi/php/1110697712/
【PHP】くだらねぇ質問はここに書き込みやがれpart5
http://pc8.2ch.net/test/read.cgi/php/1114787573/
【PHP】くだらねぇ質問はここに書き込みやがれpart6
http://pc8.2ch.net/test/read.cgi/php/1117945031/
【PHP】くだらねぇ質問はここに書き込みやがれpart7
http://pc8.2ch.net/test/read.cgi/php/1121100429/
0488nobodyさん2005/08/21(日) 01:11:10ID:saxbkmPu
>>487
ご指摘ありがとうございます!
私の打ち間違いでした!
正しくは、Shift_JISです!

ご親切にありがとうございました!
0489nobodyさん2005/08/21(日) 02:09:59ID:???
>>486
ttp://www.php.net/manual/ja/ref.mail.php
Windows環境でmail関数(mb_send_mailも)を使うと、
メール鯖(同じ鯖内でも)とネットワーク接続してメールを送信することになる。
(Windows以外では、sendmailプログラムに直接データを渡す)
なので、php.iniの中で、どのメール鯖と通信するかと設定する必要がある。(SMTP,smtp_port,sendmail_from)
(日本語マニュアルのMail設定オプション説明の SMTP int の行は smtp_port の間違いだね。)

要は、メール鯖を用意(自鯖でもいいし、プロバイダのメル鯖でもいいし)していて、
そのメール鯖の情報がphp.iniに適切に設定されている必要があります。
(んでも、プロバイダのメル鯖は、spam対策で POP before SMTPの制限があったりする。その場合は×)

メール送信に失敗した場合は、falseが返ってくるので、
if(!mb_send_mail(〜)) echo 'メール失敗'; てな感じでエラー処理をします。
0490nobodyさん2005/08/21(日) 02:25:23ID:saxbkmPu
>>489
深夜にもかかわらず、ご丁寧に返してくれてありがとうございます!
php.iniの設定ですが、あと2つ書き忘れていましたので
追記します!

607行目 自分が利用可能なメールサーバ プロバイダのウイルスチェック用のSMTPサーバ指定
611行目 上記で使っている自分のメールアドレス指定
をしていました。

489さんのおっしゃる通り、適切に設定されていても
spam対策で POP before SMTPの制限がある場合はダメなのですね。。。
因みに、今日プロバイダに電話確認したばかりなのですが
何と訪ねたら良かったのでしょうか?
あと、その回避法などはないものでしょうか?

図々しいとは思うのですが宜しくお願いいたします。
0491nobodyさん2005/08/21(日) 02:40:37ID:???
>>490
図々しいと思うのならPOP before SMTPをググって理解しやがれ。
人に聞く前に自分が思いつく回避法を試せ。
0492nobodyさん2005/08/21(日) 03:32:08ID:saxbkmPu
>>491
申し訳ないです。
私の勉強不足だと思います。
POP before SMTPについては、SMTPではそれだけでは認証が出来ないため
一度popでIPのログを残して、一定時間内にアクセスがあった場合のみ且つ
popに残ったIPのログと同じものだった場合にのみ、認証されて送信される

という理解だったのですが、これに見合うためのpopにアクセスするために
どうすれば良いかという方法を本とネットでここ3日間ほどずっと悩んでも分からずに、
(OEで一度"送受信"ボタンを押してすぐに、IEでフォームから送信をする始末で..)

幅広い知識がないと、やはり難しいものですね...

491さん、ご気分悪くされたのなら申し訳ございません。
自分でももう一度いろいろ調べた上で質問させて頂きたいと思います。
0493nobodyさん2005/08/21(日) 03:51:01ID:???
あってるよ。だから、CGIでPOP鯖にログインすりゃ良い。
0494nobodyさん2005/08/21(日) 03:58:08ID:saxbkmPu
>>493
ありがとうございます!!
POPにログインの方法を調べて作ってみます!!
出来たらお礼を言いに来ます!
絶対作って、絶対来ます!!

親切にいろいろアドバイスをくれた皆さん
ご指導ご鞭撻ありがとうございます!
頑張りたいんです!!
まだまだ知識不足なんですが
これからもどうぞ宜しくお願いします!!

では、失礼します。
0495nobodyさん2005/08/21(日) 04:05:56ID:???
>>494
えーと、POP before SMTPの制限があることは確実なんですか?
>>489で書いたのは、プロバイダのメル鯖利用は簡単にできない事がある、という例です。

そういう制限があるかどうかは、プロバイダのヘルプページに制限事項と
メールソフトでの設定方法が書いてある事が多いので、そこから推測することができます。
POP before SMTP以外にも、SMTP AUTHやら 色んな制限方法があります。

で、POP before SMTPが邪魔になっているのなら、>>493が言ってるような処理を
fsockopen関数あたりを使ってやればよいかと。
「POP before SMTP fsockopen php」あたりでググればそのものズバリのものが見つかるかも。
真面目にやる場合は、POP3(Post Office Protocol version3)を調べてゴニョゴニョと。
0496nobodyさん2005/08/21(日) 05:37:10ID:saxbkmPu
>>495
はい。今日(と言っても半日ほど前ですが)プロバイダに電話で聞いたところ
SPAM対策に時間での制限と、30分以内に500通をこえるメールの送信は出来ないように
規制を掛けているそうです。
ちなみに、メールサーバでのウイルスチェックを申込んでいるので利用しているのは
AUTH.***.jpというサーバになっています。

まだメーラーのことからPOP before SMTPについてや
PHP5でのメールの送信の方法(実例)、POP3へのアクセス・ログインの
方法を調べていたところでした!

fsockopen関数のこと、ありがとうございました!!
PHP初心者の私には、まだ手も足も出ませんが、少しの助言を貰えるだけで
かなり助かります!あとは、自分で出来る限り調べて理解していきたいと思います☆

本当に、親切に教えて頂いてありがとうございます!!
0497nobodyさん2005/08/21(日) 06:05:43ID:g7cZnge0
PHPとMySQLを使用しています。

ひらがな、カタカナ、半角カタカナを区別しないでDBから検索するとしたら、
PHPでひらがな、カタカナ、半角カタカナをひらがなに変換してDBに登録し、
SQLのwhereもPHPでひらがなに変換するっていうのありですか。

勝手にひらがなになってしまうのは妥協するものとします。

それよりもっといい方法があるのなら教えてください。
0498nobodyさん2005/08/21(日) 10:37:35ID:???
>>497
元データはそのままにして、全部ひらがなにしたフィールドを用意する。
取り出すときは元データを取り出す。
0499nobodyさん2005/08/21(日) 19:12:08ID:???
array_multirortについてなんですが使い方がよくわかりません。
たとえば
$A[0][NO] = 3
$A[1][NO] = 1
$A[2][NO] = 2
$A[0][NAME] = "ほげ"
$A[1][NAME] = "ほげほげ"
$A[2][NAME] = "ほげほ"
を[NO]順にならびかえて
$A[0][NO] = 1
$A[1][NO] = 2
$A[2][NO] = 3
$A[0][NAME] = "ほげほげ"
$A[1][NAME] = "ほげほ"
$A[1][NAME] = "ほげ"
としたいのですが。
過去ログに似たようなのがあったんですが自己解決したみたいで。くだらないですがお願いします。
0500nobodyさん2005/08/21(日) 19:15:23ID:???
array_multirortではなくarray_multisortでした。あと最後のは
$A[2][NAME] = "ほげ"
でした。
0501nobodyさん2005/08/22(月) 11:42:38ID:???
>>497
俺も検索用変換済みの検索用フィールドを用意するのが良いと思うよ。
「タイトル」「本文」なんかをまとめて検索用フィールドに突っ込むとかもできるし。
#where句の LIKE 対象が1フィールドで済む
0502nobodyさん2005/08/22(月) 12:55:50ID:mbIy2UAI
パスの中の ./ や ../ を展開(?)して、それらを含まない形のパスにしたい。
一番エレガントだと思う方法を答えてください。
パスのルール。
 ・パスは絶対パスで、/ から始まる
 ・ファイル・ディレクトリ名は . で始まることもある ex) /www/htdocs/.htaccess
 ・パスがディレクトリ名で終わる時は / で終わる
 ・万一 ../ を展開して、ルートの下に下りてしまうようなときは、/ もしくはヌルストリングを解とする
どうよ?
正規表現一発で処理しようとトライしたんだけど、なかなかどうして難しいもんです。
0503nobodyさん2005/08/22(月) 13:04:01ID:???
>>502
意味不明。
パスといっても、サーバパスとURI上のパスがアル。
掲げたルールはなんに対してのルールなんだか・・
元?変換後?
もう少し、状況踏まえて判りやすく。
0504nobodyさん2005/08/22(月) 13:10:42ID:???
>>502
パスが存在するっていう前提だがrealpath()ではあかんのか?
05055022005/08/22(月) 13:14:45ID:???
>>503
サーバパスです。
入力されるパスは上記ルールに従っています。
この条件で、./ や ../ を含んでいるパスを適切の処理して、それらを含まないパスを返す関数を作ると考えてください。

でも、../ を処理してルートの下に下りたときは、>>502 のルールだと難しいかもしれないですね。
とりあえずこういったイリーガルな場合は、各自挙動を決める、ってことでどうでしょう?
というか、切実な質問ではなく、エレガントな解を求めるパズルのようなものだと考えてください。

自分の作った一部を挙げると、 ./ を展開する部分までしかできてないですが

function toruDot($path)
{
 $ans=Preg_Replace('/\/(\.\/)+/','/',$path); // ./ を取る
 // ここに ../ を取る処理を書く
 return $ans;
}

てな具合です。
今自分のやり方だと、../ をループで取り除くような処理になってしまうのですが、これをもうちょっとすっきりできないかと。
05065042005/08/22(月) 13:16:58ID:???
>>504
ありゃ、便利な関数があるもんですね。
自分の無知さに打ちひしがれてしまいました・・・

でも、できれば単純な文字列処理にしたいです。
そのパスがサーバ上に存在するかどうかは無関係にしたいです。
0507506=5022005/08/22(月) 13:18:00ID:???
>>506 の名前欄まちがえました。502 です。
05085022005/08/22(月) 13:34:54ID:???
んー、なんかイマイチなんで出さなかったのですが、やっぱり一応答えが出る版を書いておきます。

function toruDot($path)
{
 $a=Array();
 foreach(Explode('/',$path) as $nm) {
  if($nm=='.') continue;
  if($nm=='..') {
   if(Empty($a)) break;
   Array_Pop($a);
  }
  else {
   $a[]=$nm;
  }
 }
 return Join('/',$a);
}

スッキリしないですよね?
正規表現一発ぽんとかでできるといいなぁ・・・
 
0509nobodyさん2005/08/22(月) 14:08:07ID:g44ZS3v9
ユーザー定義関数の中でグローバルスコープの配列変数を
参照するのはどうしたらいいのですか?
0510nobodyさん2005/08/22(月) 14:11:06ID:???
>>509
つ http://php.s3.to/man/language.variables.scope.html
0511nobodyさん2005/08/22(月) 15:03:43ID:???
>>502
>パスのルール。
> ・パスは絶対パスで、/ から始まる

>>505
>入力されるパスは上記ルールに従っています。
>この条件で、./ や ../ を含んでいるパスを適切の処理して

入力値が絶対パスで/から始まるんじゃないの?
どこに、./ や ../ が含まれるというの?


そもそも「入力されるパス」ってどこから入力されるのよ。
05125022005/08/22(月) 15:15:30ID:mbIy2UAI
>>511
入力ってのは、関数の入力です。汎用処理なので、元々どこから入力されたかはどうでもいいです。
お題は、パス中に含まれる相対表記を省いたパスを作る、ということなのですが、そんなに分かりづらいでしょうか?
で、その処理対象のパスの記述として、先頭は / で始まる、ということにして、それを便宜上絶対パスと書いたわけですが。
>>508 にサンプルコード出しときましたんで、興味があったら見てみてください。
# このコードは / から始まってなくてもうまく動きますが
早い話が、>>508 と同等の処理をもっと簡単に書けないか、ということです。

あと、>>508 のコード、if($nm=='..') のブロックの中は
 Array_Pop($a);
 if(Empty($a)) break;
が正しいです。
0513nobodyさん2005/08/22(月) 15:47:30ID:???
>>512
宿題なら自力でヤレや
0514nobodyさん2005/08/22(月) 16:08:44ID:???
>>508
基準となるパスがないと
../hoge
ていう入力とかどうしようもないねえ。
0515nobodyさん2005/08/22(月) 17:17:16ID:???
田中 太郎
山田 花子
空条 丈太郎
・
・
・

といった名前の羅列の、全角と半角の混じったスペース(空白)を。
苗字と名前の間のスペースをアンダーバーに置換したいのですが。

-----結果-----
田中_太郎
山田_花子
空条_丈太郎

$com = mb_ereg_replace("\t\n\r\f", "_", $com);
では駄目なのでしょうか。

Fatal error: Call to undefined function mb_ereg_replace() in /home/ryota/httpd/mail_acc/tt5.php on line 9
と言われてしまいます。

もしやmbstring関係を有効にするためにPHPをコンパイルして入れなおさなければ駄目ですか・・。
FedoraCore4で全てyumでインストールしてます。
0516nobodyさん2005/08/22(月) 17:22:23ID:???
" "と" "でいいんじゃね?
"&なんたら;"とか。なんたらの部分は忘れた。
0517nobodyさん2005/08/22(月) 17:28:07ID:???
>>516
$com = str_replace(" ", "_", $com);
で半角のスペースは置換出来ました

全角は
$com = str_replace(" ", "_", $com);
では出来ませんでした・・


$com = mb_ereg_replace(" ", "_", $com);
はやっぱり
Fatal error: Call to undefined function mb_ereg_replace() in /home/hoge/httpd/mail_acc/tt5.php on line 10
と怒られました
0518nobodyさん2005/08/22(月) 17:36:27ID:???
>>515
php-mbstring-*.*.*-**.rpm
というパッケージをインストールしろ
それで
/etc/php.dにmbstring.iniができてればOK
0519nobodyさん2005/08/22(月) 17:46:31ID:???
>>518
エラーが出なくなりました!
ありがとうございます

相変わらず置換は出来ません・・

やってる事
$com = str_replace(" "," ",$com);
$com = str_replace(" ", "_", $com);
$com = mb_ereg_replace("\t\n\r\f", "_", $com);

悪あがきしていますが駄目です・・
正規表現関数を試してみます
05205152005/08/22(月) 18:01:57ID:???
ソースは下記です
フォームから>>515のような名前の羅列を取り込みます

$com = $_POST['com'];
mb_regex_encoding('sjis'); // エンコーディング
$com = str_replace("\r\n", "\r", $com); //Win系は\r\n$com = str_replace("\r", "\n", $com); //Mac系は\r
$com = str_replace("\n", "<br>", $com); //\n除去して<br>

$com = str_replace(" "," ",$com);$com = str_replace(" ", "_", $com);$com = mb_ereg_replace(" ", "_", $com);

print $com;
05215122005/08/22(月) 18:38:56ID:???
>>513
別に宿題じゃないんだけどね。
こういう処理やるたびに同じようなコード書いて、そのたびにいつも同じようなこと思ってるわけです。
よくある処理なのにこんなにステップ数をかけるのはいかがなものかと。
だから、もうちょっと上級のコードを書く人はいないのか聞いてみた。
というか、たとえばパスを手入力させる機会があったとき、不正なパスを入れられないようなロジックを入れない?

>>508
そういう問題を簡易に解決するために、パスの先頭は / で始まるということと、../ によりートより
深く潜った場合の戻り値について >>502 に挙げてるんです、
ちなみに >>508 のケースでは、カレントの親には到達させるパスは不正ということで、ヌルストリングを返すようにしてます。
0522nobodyさん2005/08/22(月) 19:09:12ID:???
きっとソースファイルの文字コード
0523nobodyさん2005/08/22(月) 19:09:46ID:???
>>521
自作自演がしたいの?
そうじゃなければ、もう少し書き込み方を勉強しなさい。
0524nobodyさん2005/08/22(月) 19:31:09ID:???
>>521
結局のところ何がしたいのか、いや、したい事はなんとなく判るんだが、
どういうインターフェースなんだかがさっぱり見えない。

想定される不正入力値はどういったもので、
その値をどう加工したいんだか…

開発者としての志は高いみたいだが、
それ以前に他人に伝えるコミュニケーション能力に問題あり。
05255212005/08/22(月) 20:19:57ID:???
>>524

print toruDot('/abc/def/ghi.html'); → /abc/def/ghi.html
print toruDot('/abc/def/./ghi/jkl.jpg'); → /abc/def/ghi/jkl.jpg
print toruDot('/abc/def/../ghi/jkl.gif'); → /abc/ghi/jkl.gif
print toruDot('/../abc/def/ghi.txt'); → ヌルストリングス
print toruDot('/abc/././def/../ghi.pdf'); → /abc/ghi.pdf
print toruDot('/abc/.././def/../../ghi.zip'); → ヌルストリングス
print toruDot('/../abc.lzh'); → ヌルストリングス

等となるような関数 toruDot を定義することです。
不正云々はこのように正規化された後で呼び出し側で判断するので、この関数の処理の範疇ではありません。
0526nobodyさん2005/08/22(月) 20:23:57ID:???
print toruDot('../abc.lzh');だと何を返すのが希望なんだ?
0527nobodyさん2005/08/22(月) 20:29:46ID:???
>>526
それは /../abc/lzh が指定されたものと同じとし、ヌルストリングスです。
ただし、パスの先頭は / で始まるということにしましたので、そういうケースは無いものとして扱ってよいということで。
いや、もちろん対応してもいいんですが、この課題の発端が、「Preg_Replace 一発で書けないものか?」だったので、
多分先頭が / で始まるということを絶対条件にしておいた方が正規表現を書きやすいかと思っただけです。
でも、Preg_Replace にこだわりません。
0528nobodyさん2005/08/22(月) 21:18:29ID:???
>>521
回答でもなんでもないので読み飛ばして良いよ。

>こういう処理やるたびに同じようなコード書いて、

だいたい、入力値に'/abc/.././def/../../ghi.zip'のような物を入れなきゃいけない、
それがたびたび発生する、って言う時点で、入力者か前段処理のシステムに問題がある。
まずそっちを改善すべきではないだ廊下。
05295212005/08/22(月) 21:39:53ID:???
>>528
ウェブアプリなら、フォームでどんなにがんばっていたとしても、クエリを直接いじられることも想定すべきだと思います。
でも、今はそういう当初の目的よりも、できるだけ簡潔な方法を求めることに目的があります。
0530nobodyさん2005/08/22(月) 21:47:18ID:X7Dykvns
ったく低レベルしかいないスレだなw
質問の内容が理解できないバカもバカなら
こんなところでマトモな解答があると思ってる502も愚か過ぎるw
0531nobodyさん2005/08/22(月) 23:08:09ID:???
>>530
馬鹿でない解答の見本をどうぞ
ただの煽りは要らん
0532Perl厨2005/08/22(月) 23:44:59ID:???
function toruDot($path)
{
    $path = preg_replace('/(?<=\/)\.\//', '', $path);
    do{
        $path = preg_replace('/[^\/]+\/\.\.\//', '', ($old = $path), 1);
    }while($old != $path);

    return(preg_match('/\/\.\./', $path) ? '' : $path);
}

こんなものでどうでしょう。
ただ、少しトリッキーな部分があるのは否めません。
普通にexplodeして処理した方が分かりやすくて、確実でしょう。
0533nobodyさん2005/08/23(火) 00:08:38ID:???
>>512

"/a/b/./"は、"/a/b/"になり、
"/a/b/../"は、"/a/"になり、
"/a/b/.../"は、"/"になるってことですね。<-これはないか。

一見単純に
"./"=>""
"x/../"=>""
に置換するような正規表現で出来そうだが、
”../......./..../////"とか変なパスもエラーとしてヌルストリングスを返すとか
考えれば、多少は複雑な処理になってしまうもんじゃないの。
0534nobodyさん2005/08/23(火) 00:42:26ID:???
>>532
それは /../../abc のようなときに正しく動かないです。
ループ中の正規表現の先頭は、\.\. ではない [\/]+ にマッチさせないといけないです。
この書き方が何気に面倒なんですよね。自分もその辺で悩み、玉砕されました。
しかしながら、アプローチとしてはやっぱり最初に ./ を取ってしまって、あとはループで ../ を削除していく、ってことですね。
でもこのやり方だと、無理やり正規表現を使ってる、って感じで、いまいちエレガンスを感じないんですよね・・・
# せっかく解答していただいたのにナニですが

>>533
Win系で動くサービスだと、.../ 等にも対応しないといけなそうですね。
うーむ・・・
0535nobodyさん2005/08/23(火) 00:55:08ID:???
>>512
preg_splitの分割文字を"/"にして配列につっこめば、ループで回せば出来ると思うよ。
0536Perl厨2005/08/23(火) 00:59:18ID:???
>>534
本当ですね。
/..abc/../とかも正しく処理する正規表現を書けず、
諦めて手を抜いたのが敗因です。
0537nobodyさん2005/08/23(火) 01:24:54ID:n8cysVom
あるサイト http://hogehogehogehoge.co.jp/ に
phpからアクセスして、
その表示されたサイトのソースを持ってくるようなスクリプトを
作りたい場合どうすればいいでしょうか?

1.PHPからあるサイトにアクセスさせる方法
2.アクセスしたサイトのソースを持ってくる方法

以上の2つをどのようにすればいいか良く分かりません。
ヘルプミーでございます
0538nobodyさん2005/08/23(火) 01:33:02ID:???
>>537
file_get_contents を使えば出来ると思うよ。
0539nobodyさん2005/08/23(火) 01:35:46ID:???
>>537
fopen("http://hogehogehogehoge.co.jp/","r")
0540nobodyさん2005/08/23(火) 07:27:03ID:???
>>525
俺だったら入力値に../が含まれていたらエラー処理して終わるな
0541nobodyさん2005/08/23(火) 07:54:47ID:???
俺のウインドウヅには ./表示/可能 と言うファイルがあるし
OSによってパスの最大長も違うようだけどどうするよ。
0542nobodyさん2005/08/23(火) 09:16:17ID:???
おまいら
変数に代入するときに 参照使ってますか?
( $a =& $b)

php programers magazeneにあまり意味がないって書いてあった。
0543nobodyさん2005/08/23(火) 09:28:25ID:???
>>542
単純な文字列では使わないけど、配列には使ってる。
なんとなく。
というか、同一の配列を複数の参照で書き換えたりすることが多いから、習慣的に。
0544nobodyさん2005/08/23(火) 10:00:43ID:???
>>515
事故解決しました

$com = mb_convert_kana($com, "s","Shift_JIS");

どうも文字コードがきちんと指定出来てなかっただけみたいです。
0545nobodyさん2005/08/23(火) 10:31:21ID:???
参照はあんまり使わないなぁ
0546nobodyさん2005/08/23(火) 11:02:57ID:???
クラスと連想配列以外は参照使ってない。
確かにパフォーマンスを期待した参照は無意味ってマニュアルにも書いてた気がする。
と、思って再確認してみた。

> PHP 4 は変数に値の代入を行う別の方法を提供します。
> それは、 参照による代入 です。 この場合、新規の変数は元の変数を参照するだけです。
> (言いかえると、元の変数の"エイリアスを作る"または元の変数を"指す")
> 新規の変数への代入は、元の変数に影響し、その逆も同様となります。
> この手法ではコピーは行われないため、代入はより速やかに行われます。
> しかし、速度の向上が体感できるのは、重いループや大きな配列または オブジェクトを割り付ける場合に限られるものと思われます。

そしたらパフォーマンスも上がると書いてあった。
0547nobodyさん2005/08/23(火) 11:05:19ID:galtEPWU
PHPでファイルを吐き出すとき、すでにファイルがあったらファイル名を連番にしたいのですが、
どうすればいいのでしょうか?

例:「123456」というファイルを吐き出すとき、すでにファイルがあったら「1234561」とする。
Perlだと
$FILE = "123456";
$PATH = "./data/".$FILE;
$i = 1;
while (-e $PATH) {
$PATH = "./data/".$FILE.$i;
$i++;
}
open (Out, "> $PATH");
とすればいいとは教えてもらったんですが。
0548nobory2005/08/23(火) 11:23:17ID:+KXClmRt
URLから、ドメイン部分だけを抽出するには、
どのようにすればいいですか?
よろしくおねがいします
0549nobodyさん2005/08/23(火) 11:28:45ID:???
parse_url()
0550nobodyさん2005/08/23(火) 11:35:59ID:???
>>547
while (-e $PATH)
↓
while (is_file($PATH))
0551nobory2005/08/23(火) 11:36:45ID:+KXClmRt
>>549

ありがとうございます
05525472005/08/23(火) 11:48:12ID:???
>>550
ありがとうございます。
試してみます。
0553nobodyさん2005/08/23(火) 14:31:47ID:???
文字コードが utf-8 の環境で、「ひらがな」だけをチェックする
関数を作ったんだけど、「む」だけマッチしません。
なんでだろう?
$patarn = "[^ぁ-ん]"; に「む」を追加すれば問題ないんだけど。
--------------------------------------
function checkHiragana( $item ){
$patarn = "[^ぁ-ん]";

if (ereg ($patarn, $item)){
return false;
}
elseif (strlen($item) > 32) {
return false;
}
else {
return true;
}
}

0554nobodyさん2005/08/23(火) 23:02:08ID:uQaQUTbk
553に似たような質問があるけど別人です。
-----
$str1 = "あa";
$str2 = "aあ";
if (mb_ereg_match("[^ぁ-ん]",$str1)) {
echo "str1 ひらがな以外が含まれます\n";
}
if (mb_ereg_match("[^ぁ-ん]",$str2)) {
echo "str2 ひらがな以外が含まれます\n";
}
-----
こんなテストプログラムを作ったんですが、
結果は、
-----
str2 ひらがな以外が含まれます
-----
しか出てきません。なぜなんでしょう?
ひらがな以外が含まれていることを検出したいのですが、、、
0555nobodyさん2005/08/24(水) 02:25:42ID:???
プログラマ板から誘導されてきました。
総合的な質問スレが見つけられ無かったので、
自分も触っているphp関連の質問スレにきました。
場違いな質問かもしれませんが、答えて頂けると幸いです。


自分なりに何時間かググってみたんですが、結局よくわかりませんでした。
よろしくお願いします。

mixiやgreeのようなwebサイトを作ってみたいと思っているのですが、
どの言語でプログラムするのが良いのかわからずに悩んでいます。
(言語が決まれば参考書を買いに走るつもりです。)
Java、perl、php、C#・・・。
色々あって結局どれがいいのかわかりません。
オススメの言語&開発環境などありますでしょうか?

プログラムしたことのある言語はC言語 と php 。
動作させるサーバはLinax。
持っているソフトは eclipse と VisualStadio2003 です。
0556nobodyさん2005/08/24(水) 02:28:17ID:???
phpでできるかどうかぐらいは判断できないのか?
0557nobodyさん2005/08/24(水) 02:58:16ID:JrCzEQY3
>>556

phpについては、php5徹底攻略(赤マンモス本)と言う本をやっと読み終えたぐらいなんです。
レベル低くてすいません。

この本を読んだ感じでは、phpでやって出来なくはないんじゃないかなと思っています。
(phpでやるならば、もちろんリファレンスや中級者本など追加で揃えます。)

ただ、自分の中では結構大掛かりなプログラムになると思っているので、
できれば途中で「違う言語・環境の方が良かったと気づく」のは避けたいのです。

phpとCなんで直接比較出来ないかも知れませんが、
例えばeclipseよりはVC++の方がプログラムし易かったりしませんでしょうか?
(javaの開発環境についてはまだ良く知りません。)

また、検索中に
「大規模なWeb構築ならphpよりはjavaの方がいい」というサイトや、
「phpは早いけど、計算量が増えるとjavaの方が早い」というサイトを見かけました。
(もちろん、phpの方が良いという意見もありました)

こんなわけで、こう、迷わされる要素が色々とあって、
なかなか自分では判断が付かずに相談させてもらいました。
0558nobodyさん2005/08/24(水) 03:04:44ID:???
PHPとCではサーバーサイドプログラミングの仕方が全く違うことを知って欲しいのだが
まずはそれから勉強してくれ。
0559nobodyさん2005/08/24(水) 03:09:07ID:???
データベースの話も出てきてないって事は、webアプリケーションの
イメージも全然掴めてないって事だよねぇ。
その状態で言語をどれにするか悩んでもはっきり云って無駄な気がする。
多言語間の移植なんてリファレンスあれば難しい事でもないから、
さっさと作り始めた方がいいと思うよ。
あと、「違う言語・環境の方が良かった」となりたくなければ、プログラムを
作る所からはじめるのではなくて、設計書作る所から始めた方がいいと思う。
SNSなんて規模が大きくなるサイトなら尚更だよ。
0560nobodyさん2005/08/24(水) 03:16:26ID:JrCzEQY3
お二人ともありがとうございます。

>>558
「サーバーサイドプログラミングの仕方」ですね。調べてみます。
phpはホムペでデータベースから検索かけられるくらいの物を作ってみたのですが、
Cはweb用はおろかグラフィカルな物すら作った事がありませんでしたので。

>>559
データベースはmysql使っています。
といってもSQLについてもまだまだ勉強中ですが。

> 多言語間の移植なんてリファレンスあれば難しい事でもない
そうなんですか!知らなかったです。
まずは設計書作り。そして、とりあえず腹をくくってプログラミングするのがいいんですね。
なるほど。
0561nobodyさん2005/08/24(水) 03:42:45ID:???
>>560
559 の言うとおりまずは設計からだね。
性能要件もあるけど、ロードバランスするとかそのレベルじゃない
限り言語選択には影響しないと個人的には思う。

根底の仕様が揺るがない確固たる自信があるなら、スクリプト言語より
仕様が厳格で保守性の高い Java を。
ただし、最初の設計を誤るとプログラムが崩壊する。

最終形をを読み切れなくて、スモールスタートしたいとかスクラッチ
アンドビルドの部分がおおいなら生産性の高い PHP を。

Perl は Web 的に機能が低いし、Linux 使うなら C# をわざわざ
選択する必要はない。
0562nobodyさん2005/08/24(水) 04:23:53ID:???
rewind($fp)とfseek($fp, 0);の違いを教えてください
0563nobodyさん2005/08/24(水) 06:27:30ID:???
>>554
スクリプトがシフトジスで内部エンコードがEUC-JP
>>562
関数の名前、引数の数が違う
実行した結果は同じ
0564nobodyさん2005/08/24(水) 09:47:23ID:AR3QKhJJ
PEARのSpreadsheetExcelWriterを使用してWEB帳票を作成しています

WindowsからFedoraCore4に移行作業をしているのですが、
Spreadsheetを使用したExcel出力プログラムのエラーが回避できません。
どういった対処を施せばいいのかご指導お願いします。

OS:FedoraCore4
wwwサーバ:Apache2
PHP:PHP-5.0.4 (OLE-0.5、SpreadsheetExcelWriter-0.8をインクルード)
    pearコマンドのpear listでインストールの確認はできています。

エラーの内容
  Warning: main(/usr/share/pear/Spreadsheet/Excel/Writer.php) [function.main]: failed to open stream:
  Permission denied in /var/www/html/dekita/habikino/excelout.php on line 3

  Fatal error: main() [function.require]: Failed opening required '/usr/share/pear/Spreadsheet/Excel/Writer.php'
  (include_path='.:/usr/local/include/php:/usr/local/lib/php:/usr/share/pear') in /var/www/html/dekita/habikino/excelout.php on line 3

プログラムに関連するディレクトリとファイルの権限はnobody.nobodyの775としていますが
上記のようなエラーがでてしまいます。WindowsのApache2やAnHTTPD上では動作していました。

 権限をnobodyの775にしているディレクトリとファイル
 ・/var/www/html以下のファイル全て
 ・/usr/share/pear/以下のファイル全て

1:<?php
2:
3:   require_once('/usr/share/pear/Spreadsheet/Excel/Writer.php');
・:
・:?>

0565nobodyさん2005/08/24(水) 10:13:32ID:???
>>564
適当だけど、SE Linux きってみ。
0566nobodyさん2005/08/24(水) 10:26:03ID:???
if($_GET['var'])
で値があるかを調べたいんですが、値が0の時はFALSEになってしまいます。
&& で条件追加してもいいんですが、もっと賢い方法ありますか?
0567nobodyさん2005/08/24(水) 10:27:14ID:???
>>566
if(isset($_GET['var'])) ?
05685642005/08/24(水) 10:43:18ID:AR3QKhJJ
>>565
ありがとうございます。
パーミッションエラーは回避されました。
0569nobodyさん2005/08/24(水) 10:48:35ID:???
>>561

> 最終形をを読み切れなくて、スモールスタートしたいとかスクラッチ
> アンドビルドの部分がおおいなら生産性の高い PHP を。

ぴたりと言い当てられた気分ですw
スモールスタートして、機能追加、機能追加・・・とやっていこうと思っていたので、
プロセスモデルは、スパイラルモデルかラウンドトリップのつもりでした。

「まずは設計」とのお言葉通り、
どの言語にしても共通な「要求分析→外部設計」にまずは取り掛かることにします。
その段階で十分に考えを練る事が出来たらjavaもいいかなと思いました。
(長い目でみると保守性を優先したい気もしますので)
生産性の高さは、ブログのプラグインを作っている時に感じていましたので、
今の所phpを心の中では本命にしておきます。

一つ気になったのですが、
ロードバランスするとなるとphp(やその他のスクリプト言語)は向いていないのでしょうか?
スモールスタートして、万が一大規模(機能・ユーザー数)になった場合には、
ロードバランスが必要になってくると思うので、一応視野には入れておきたいのです。
05705542005/08/24(水) 11:15:44ID:pI/B8obu
>>563
>スクリプトがシフトジスで内部エンコードがEUC-JP
どちらもEUCになっているようなのです。
どなたかヘルププリーズ
0571nobodyさん2005/08/24(水) 11:21:08ID:???
>>569
> ロードバランスするとなるとphp(やその他のスクリプト言語)は向いていないのでしょうか?

ロードバランスって言葉はあんまり良くないかもね。

同じ機能をもつサーバを複数用意して、いわゆるロードバランスするだけなら、
それなりの仕組みをいれればプラットフォーム問わずできる。
(セッション管理には注意してな

一方で 機能ごと にサーバを分けて負荷分散するという考え方もある。
これは php ではできないと思った方がいい。(よね? おれはみたことない)
この辺は、Java だと EJB とか環境がそろっている。

って感じか。
05725662005/08/24(水) 12:35:47ID:???
>>567

ありがとうございます。
ただ、
$var = ""; のときでも isset はTRUEを返してしまいますね…;;
empty 使うと $var = 0; のときはTRUE…;;
0573nobodyさん2005/08/24(水) 12:55:04ID:???
>554
マニュアルの mb_ereg と mb_ereg_match の項目を見比べる。
>566
型の比較表
http://www.php.net/manual/ja/types.comparisons.php
0574nobodyさん2005/08/24(水) 12:56:14ID:???
>>572
それなら賢い方法はないので普通に条件式を増やしてください
0575nobodyさん2005/08/24(水) 13:14:06ID:???
if ($_GET['ver'] == "")
0576nobodyさん2005/08/24(水) 14:23:39ID:???
>>575
if ($_GET['ver'] !== "")
05775752005/08/24(水) 14:27:24ID:???
だめだ
未定義のときもtrueだ
結局式が2つ必要
0578nobodyさん2005/08/24(水) 14:57:44ID:???
Webで、データを投稿する際、投稿画面→確認画面→実行画面という形のものを作りたいと思っています。
この時、確認画面でデータが間違っている事に気づいた時、データを保持したまま投稿画面に戻るには
どのようにするのがいいでしょうか?

確認画面に送信ボタンと戻るボタンを作り、それぞれのページにsubmitすればいいとは思うのですが、
この場合、確認画面のソースのみを触って、それぞれにsubmitする方法はあるのでしょうか?
実行画面のソースをいじればいいというのはわかっているのですが、実行画面からさらに投稿画面に
飛ぶというのはあまりやりたくないもので。
御助言よろしくお願いします。
0579nobodyさん2005/08/24(水) 14:59:23ID:???
>>572
http://jp.php.net/manual/ja/function.is-numeric.php
0580nobodyさん2005/08/24(水) 15:47:44ID:???
オブジェクトが利用できるメソッドを表示する関数ってないですか?
PHP4逆引大全500見てものってないです。

とあるフレームワークで $obj->getStructure() というのがエラーになるのですが、
何が悪いのかわからないのです。

よろしくお願いします。
0581nobodyさん2005/08/24(水) 15:50:04ID:???
>>579
$var = "a"がfalseになる
0582nobodyさん2005/08/24(水) 15:53:54ID:???
>580
get_class_methods
下手な参考書にたよるより公式マニュアルの見方覚えたほうがいいよ。
05835792005/08/24(水) 16:06:20ID:???
>>581
「値があるか」を「数値があるか」と誤読した orz

http://jp2.php.net/manual/ja/function.strlen.php
0584nobodyさん2005/08/24(水) 16:11:39ID:???
>>582
ありがとうございます。

公式マニュアルは、いつも見にいくのですが、いつも全くわからないのです。
答えがわかったためしがないです。読み方があるのですかねぇ。





0585nobodyさん2005/08/24(水) 16:14:33ID:Y2M5edeX
PHPを使い始めたのですが、、たまに化けたり、エラーが出てしまいます。
化けたときのHTMLと、化けてないときのHTMLを比較すると、
普段は「<TR>」となっているところが「<Tzシ」となっていました。
化けているのはこの2バイト分だけで、ほかは全く同じでした。
原因がさっぱりわかりません。何かヒントになりそうなことがあれば教えてください。

環境
OS:RedHat 9
PHP:4.3.10
Apache:2.0.54
0586nobodyさん2005/08/24(水) 16:28:20ID:???
>>585
文字コード
05875852005/08/24(水) 17:04:06ID:???
>>586
どうもです。
ただ、化けてるときもほかのところは「TR」ってなってるんですよね。
解決方法とか、参考になるページとか知ってたら教えてください。
■ このスレッドは過去ログ倉庫に格納されています