【PHP】下らねぇ質問はここに書き込みやがれ 24
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
2006/07/07(金) 14:54:53ID:KnVubDvEここならお前の下らない質問に回答があるかも知れません。
まず読め【PHP マニュアル】
http://www.php.net/manual/ja/
過去スレは>>2
0612nobodyさん
2006/07/18(火) 11:33:37ID:WFdfnqCG>>610様。
先程、コメントを外し、mbstring.language = Japanese
にしてApacheを再起動しました。
>>611様。
アップロードされたファイル自体を目視確認しました。アップロード
されたファイル自体は、確かに文字化けしていないことを、目で確認
しました。
けれども、文字化け(最初の文字だけが「??」になってしまう)は
変わりません。アップロードされたファイルを「system(nkf -w 〜);」
とやってもやらなくても、同じ文字化けが起きてしまいます。
if ($_FILES['csvfile']['name'] != "") {
$tempfile = $_FILES['csvfile']['tmp_name'];
$tempfile_utf = $_FILES['csvfile']['tmp_name']."utf";
system("nkf -w ".$tempfile." > ".$tempfile_utf); // これをやらなくても文字化けする。
$file = fopen($tempfile_utf, 'r');
list($field1,$field2,$field3)=fgetcsv($file,20000);
print("1番目".$field1."2番目".$field2."3番目".$field3);
}
なのですが、何が原因かお分かりでしょうか?
0614nobodyさん
2006/07/18(火) 11:55:52ID:???実際にphpinfo();を表示させているサイトがありました。
サーバの環境から、Win鯖なのでユーザー名まで全て晒しています。
phpinfo();が表示する情報程度のものは
別に誰に見られても困るほどの事は無いのでしょうか?
0617nobodyさん
2006/07/18(火) 12:40:04ID:???> けれども、文字化け(最初の文字だけが「??」になってしまう)は
その最初の文字って何て文字さ。
> list($field1,$field2,$field3)=fgetcsv($file,20000);
> print("1番目".$field1."2番目".$field2."3番目".$field3);
化ける内容ってこの出力なのか?
fgetcsvは日本語を含むCSVデータでは使えないぞ?
0619nobodyさん
2006/07/18(火) 12:42:36ID:???0620560
2006/07/18(火) 13:13:09ID:n2ZEUTcJname="type[]" value="1"のようにしたほうが良いと言うことまでは
わかりましたが、どうやって複数の数値を持たせるのかがわかりません。
なんどもすいませんが、よろしくお願いします。
0622nobodyさん
2006/07/18(火) 13:16:46ID:???safemode の on/off が見えていたら困る場合、
on/off が見えなくても、
on か off のどちらかなのだから、safemodeが見えなくても、1/2で困ることになる。
0623nobodyさん
2006/07/18(火) 13:20:08ID:???onを予想して困る要因を作成し、1/2にハズレてだめだったとしても、
次にoffの場合の困る要因を作ればいいのだから、
どのみち困らせることができることになる。
0624nobodyさん
2006/07/18(火) 13:21:27ID:???safemodeがばれて困るような場合では、
safemodeが見えていようが見えていまいが、困るということだ。
0626nobodyさん
2006/07/18(火) 13:32:24ID:???value="a=1,b=2,c=3"
にする場合に必要なパーツはほぼ出揃ってるんだから、そっちでやっていいんじゃねーの?
(複数の値ってより、"a=1,b=2,c=3"っていう1つの文字列だな)
0628614
2006/07/18(火) 13:34:05ID:???やっぱドラゴンボールに例えるとわかりやすいな
0630nobodyさん
2006/07/18(火) 13:40:06ID:???仙豆が無い事がわかって困るなら、仙豆なんて物が初めから無くても困る
ってことだ
0632nobodyさん
2006/07/18(火) 14:22:42ID:???0633nobodyさん
2006/07/18(火) 15:28:52ID:WFdfnqCG> list($field1,$field2,$field3)=fgetcsv($file,20000);
> print("1番目".$field1."2番目".$field2."3番目".$field3);
> 化ける内容ってこの出力なのか?
> fgetcsvは日本語を含むCSVデータでは使えないぞ?
>>612 です。ありがとうございます。>>617様のアドバイスを元に、
「fgetcsv 日本語」で調べてみました。PHP5でfgetcsvを使った場合、
日本語が不安定のようです。ただ、CSVファイルの中身を全てダブル
クォーテーションで囲んで試したところ、文字化けしないで済みま
した。
どうも、ありがとうございました。
0634nobodyさん
2006/07/18(火) 15:35:22ID:qPB2Cam5で、メールを送信しようとしたのですが、エラーが返ってきます。
[mail function]
; For Win32 only.
SMTP = localhost
smtp_port = 25
; For Win32 only.
;sendmail_from = me@example.com
; For Unix only. You may supply arguments as well (default: "sendmail -t -i").
;sendmail_path =
; Force the addition of the specified parameters to be passed as extra parameters
; to the sendmail binary. These parameters will always replace the value of
; the 5th parameter to mail(), even in safe mode.
;mail.force_extra_parameters =
なんですけど、どう設定すれば良いのでしょうか?
WindowsXP、Apache2.0.58、PHP5です。
本当にくだらない質問ですが、お願いします。
0636nobodyさん
2006/07/18(火) 15:43:28ID:???UTF-8でマルチバイト文字列の長さを、日本語=2、英数字=1として
カウントしたいのですが、strlenはひらがな、カタカナ、漢字を
全て3バイトとカウントすると仮定しても大丈夫でしょうか?
<?php
$str = "日本1234語";
$n = mb_strlen($str);
$m = strlen($str);
for ($i = 0; $i <= $n; $i++) {
$t = $i * 3 + $n - $i;
if ($t == $m) {
echo $i * 2 + ($n - $i);
break;
}
}
?>
0637634
2006/07/18(火) 15:53:15ID:qPB2Cam5シングルクォートにしてみましたが、変わりないです。
0640nobodyさん
2006/07/18(火) 15:57:59ID:???英数字のみを取り出して足し算、でした。
0642nobodyさん
2006/07/18(火) 15:59:31ID:???君はもう少し基本的なプログラムからゆっくり勉強した方がいいと思うぞ。
なんでそんな基本的なことで詰まってるのよ。
0644nobodyさん
2006/07/18(火) 16:02:10ID:???$m = strlen($str);
$a = ($n + $m) / 2
0645634
2006/07/18(火) 16:02:53ID:qPB2Cam5すいません
Warning: mb_send_mail() [function.mb-send-mail]: Failed to connect to mailserver at "localhost" port 25, verify your "SMTP" and "smtp_port" setting in php.ini or use ini_set() in E:\Web\test.php on line 9
です。
0646nobodyさん
2006/07/18(火) 16:03:57ID:???で、それでなんで mb_send_mail でエラーが起きたと思ったの?
404ってApacheのエラーコードじゃなくて?
0648646
2006/07/18(火) 16:06:26ID:???0650nobodyさん
2006/07/18(火) 16:16:34ID:???エラーメッセージってのはその名の通り、エラーの内容が表示されているんだよ。
中高生が読めるレベルの英語なんだから、ちゃんと読めばエラーの理由が分かる。
0652nobodyさん
2006/07/18(火) 16:37:26ID:???実働サンプルを拾ってきた方が早いよ
0654nobodyさん
2006/07/18(火) 17:22:21ID:???もうちょっと頭を使いましょう。
ディレクトリを後から変更する予定があるのなら、
includeパスに含めるディレクトリ部分の文字列を変数なり定数なりにすれば良い。
●例:
define ("_DIR",'http://example.com/hoge/'); //ディクレトリ変更ならhogeを書き換える
include (_DIR."template.php");
0655nobodyさん
2006/07/18(火) 17:25:59ID:???0656654
2006/07/18(火) 17:29:01ID:???定数の定義自体も別ファイルにしてincludeすれば、
複数のファイルから同じテンプレを読み込んでいても
一箇所のみ変更するだけでディレクトリ名を全て変更できる。
●例;
config.phpにて以下を記述
define ("_DIR",'http://example.com/hoge/'); //ディクレトリ変更ならhogeを書き換える
HTML表示スクリプト(たとえばindex.php)にて、
include ("config.php");
include (_DIR."template_header.php");
include (_DIR."template_left.php");
include (_DIR."template_main.php");
これでキミのやりたいことが実現できるでしょう。>>604=>>598くん。
0657560
2006/07/18(火) 17:35:22ID:n2ZEUTcJ<input type="checkbox" name="type[]" value="a">
<input type="checkbox" name="type[]" value="b">
<input type="checkbox" name="type[]" value="c">
でPHPは
if( in_array( "a" , $ty ) ){
$a1 = 3;
$b1 = 1;
}
if( in_array( "b" , $ty ) ){
$a2 = 4;
$b2 = 32;
}
if( in_array( "c" , $ty ) ){
$a3 = 31;
$b3 = 12;
}
$a = $a1 + $a2 + $a3;
$b = $b1 + $b2 + $b3;
echo "$a";
echo "$b";
こんな感じです。
3個とも選択すればerrorが出ないのですが、それ以外は全部errorです。
また方向が間違っているでしょうか?
0658nobodyさん
2006/07/18(火) 17:35:50ID:???それでも、そのファイルとconfig.phpのファイルの位置関係が変わったら
意味内よね。 って言い出したらきりないけども…。
僕の場合、ディレクトリ構造が変更されることはないと割り切って、
../ だとか ../../ だとかそれぞれに書いてますよ。
0660nobodyさん
2006/07/18(火) 17:41:09ID:???<input type="checkbox" name="type[]" value="1">
<input type="checkbox" name="type[]" value="2">
<input type="checkbox" name="type[]" value="3">
PHP
foreach ($type as $v) {
echo $v."<br>";
}
これをやってごらん。
0661660
2006/07/18(火) 17:44:43ID:???0664nobodyさん
2006/07/18(火) 17:49:38ID:???どうせなら、そういう具体的な数値はイッコの配列に入れたほうがいい
$arrayA = array (3, 4, 31);
$arrayB = array (1, 32, 12);
foreach ($_GET['type'] as $key => $val) {
if ($val) {
$a += $arrayA[$key];
$b += $arrayB[$key];
}
}
方向性ちがったらゴメン
0665nobodyさん
2006/07/18(火) 18:08:08ID:???0666657
2006/07/18(火) 18:18:21ID:n2ZEUTcJこれだとerrorがでませんね。
これをヒントにして作り直せと言うことでしょうか?
>>662
あとの二つをチェックした場合には
Notice: Undefined variable: a1 in C:\Program Files\Apache Group\Apache2\htdocs\ank.php on line 22
Notice: Undefined variable: b1 in C:\Program Files\Apache Group\Apache2\htdocs\ank.php on line 23
3544
このように表示されます。
>>664
今から試してみます。
0667666
2006/07/18(火) 18:21:45ID:n2ZEUTcJ$a = $a1 + $a2 + $a3;
$b = $b1 + $b2 + $b3;
これです。
0668nobodyさん
2006/07/18(火) 18:54:02ID:???0669nobodyさん
2006/07/18(火) 19:00:43ID:???ttp://wiki.2chx.net/php/index.php?cmd=read&page=%A5%E1%A1%BC%A5%EB%C1%F7%BF%AE%40windows
0670nobodyさん
2006/07/18(火) 19:08:03ID:???>660と>657を掛け合わせれば解決できるのではないかと。
複合演算子を使う必要があります。
PHP: 代入演算子 - Manual
ttp://jp.php.net/manual/ja/language.operators.assignment.php
>657を元に、複合演算子で変数をまとめても良いですが、
どちらかといえば660氏のアルゴリズムを流用した方がスッキリすると思います。
>>667
ちゃんと、英語読んでます?
辞書を引けば解るレベルの英文だと思うのですが…。
「警告: 未定義の変数があります: a1 in...line22」
「警告: 未定義の変数があります: b1 in...line23」
お分かりでしょう?
それぞれの右辺の3つの変数がセットされていなければ、「変数が初期化されていません」とエラーが返ってくるは道理です。
必ず、初期化済みの変数でもって式を構成しなければなりません。
0671670
2006/07/18(火) 19:11:21ID:???ただ、最初から答えを教えるとあまり勉強にならないと思いますが…、余計なお節介かな。
0672nobodyさん
2006/07/18(火) 19:30:10ID:???> 必ず、初期化済みの変数でもって式を構成しなければなりません。
別にエラーレベルを下げちゃっても全然かまわんと思うけどね。
初心者の勉強のために消さない方がいいと考えてるんだろうけど
「必ず」ってこたないだろ。
0674nobodyさん
2006/07/18(火) 19:36:08ID:???おいおい。それだと最初のチェックボックスをチェックしなかったらキーがずれるぜ?
合わせて
<input type="checkbox" name="type[0]" value="a">
<input type="checkbox" name="type[1]" value="b">
<input type="checkbox" name="type[2]" value="c">
とHTMLも書き直してやらなきゃ。
0675nobodyさん
2006/07/18(火) 19:37:29ID:???授業で覚えたばかりの連中が回答やってんのか?
0678670
2006/07/18(火) 19:58:09ID:???確かに、「必ず」は言い過ぎかな。
「その方がよい」というニュアンスでしょうか。
>>673
そうかもしれませんが、この場合は複合演算子を使う方が多いんじゃないですかね。
>>664,677
連想配列を使っても良さそうですね。
(HTMLで配列の要素の順番を考えなくても良いという意味で。)
0679670
2006/07/18(火) 20:09:46ID:n2ZEUTcJすみません。
その初期化の方法がわからなくて困っているんですが。
0680nobodyさん
2006/07/18(火) 20:19:09ID:???0681nobodyさん
2006/07/18(火) 20:34:25ID:???マニュアルぐらい読んでください。必要最低限の事です。
Google検索: 変数 初期化とは
ttp://www.google.co.jp/search?ie=euc-jp&lr=lang_ja&num=30&q=%ca%d1%bf%f4+%bd%e9%b4%fc%b2%bd%a4%c8%a4%cf
PHP: 変数 - Manual
ttp://www.php.net/manual/ja/language.variables.php
0682670
2006/07/18(火) 20:39:22ID:n2ZEUTcJ自分でも色々と調べているのですが
うまくいかなくて・・・
初期化(?)なのかわからないですけど
$a1=$a2=$a3=$b1=$b2=$b3=0;
これを入れたらerrorが出ないようになりました。
こういうことで良いのでしょうか?
0684nobodyさん
2006/07/18(火) 21:09:07ID:???だからさ、絶対パスまたは絶対URLで書けばいいでしょ。
なんで相対パスにこだわってんの?
っていうかそれくらい自分の頭で考えてよ・・・
0686nobodyさん
2006/07/18(火) 21:17:40ID:???2.大元の設定用PHPファイルから各ディレクトリにシンボリックリンクを作る
3.大元の設定用PHPファイルを相対パスでincludeする同名のPHPファイルを各ディレクトリに置く
のどれか辺りでどうよ?
0687nobodyさん
2006/07/18(火) 22:07:58ID:???このままじゃ他に質問したい人が居てもその雰囲気に気圧されするかレスの海に飲み込まれるぞ
0688nobodyさん
2006/07/18(火) 22:08:46ID:???だから別に割り切らなくても解決できるっつってんの。
諦めずに考えろっっつってんの。
>>686
まあ大元の設定用ファイルは、そもそもディレクトリを変えないことが基本だよね。
で、分かりやすい場所に置く(セキュリティ面も含めて、privateフォルダなどが良い)
0689nobodyさん
2006/07/18(火) 22:10:52ID:???素晴らしい解答だけど、元質問の
>strlenはひらがな、カタカナ、漢字を
>全て3バイトとカウントすると仮定しても大丈夫でしょうか?
という仮定が前提になっているような・・・。
そういう意味では>>640の方が安全なのかな?
0690nobodyさん
2006/07/18(火) 23:29:36ID:???0691nobodyさん
2006/07/18(火) 23:57:48ID:P26DbQmu質問です。
PHPには、ある文字列と別の文字列の差異を見つけ出せる関数などあるでしょうか??
そして差異のある部分をHTMLで太字にしてみるとか。
ご存知だったらうれしいのですが。
0692nobodyさん
2006/07/19(水) 00:15:13ID:???> ある文字列と別の文字列の差異を見つけ出せる関数などあるでしょうか??
差異があるということは等しくないと等価。
従って、以下のようになる。
if($str1 != $str2){ 処理 }
> そして差異のある部分をHTMLで太字にしてみるとか。
まず、どういう視点で「差異がある」と見なすかを定義しなければならない。
行毎に差異を見なすのか、1バイトずつ見て、差異があった部分からEOFまでを差異と見なすのか、...etc
0693nobodyさん
2006/07/19(水) 00:39:22ID:???> PHPには、ある文字列と別の文字列の差異を見つけ出せる関数などあるでしょうか??
無い。exec()でdiffを呼び出すとかしれ。
しかしdiffにしたって行単位で違いを探すだけで、1行の中でどこからどこまでが違うとかは出さないけどな。
> そして差異のある部分をHTMLで太字にしてみるとか。
それは自分でstr_replace()などで処理すべきことだ。
「どのように表示するか」を勝手にやるような関数なんて普通あるわけないでしょう。
0694nobodyさん
2006/07/19(水) 00:47:50ID:???その解決が絶対パス??数百のHTMLがあったらそれぞれに絶対パス書いちゃって、
サーバー環境が変わったり、同一サーバーに同じ構成のプログラムを2つ入れる羽目になったら、
全ファイル一括置換とかしてるわけ?
少なくとも>>684は全く解決案になってないと思うんだが、何そんな偉そうなんだ。
0695nobodyさん
2006/07/19(水) 00:52:37ID:???馬鹿だからw
0700nobodyさん
2006/07/19(水) 02:00:51ID:???前向きな議論なら大変結構なのですがね。
0701nobodyさん
2006/07/19(水) 02:25:05ID:???pass情報はハッシュだけにしたほうが良い?
0702nobodyさん
2006/07/19(水) 02:26:20ID:???0703656
2006/07/19(水) 02:39:22ID:???>数百のHTMLがあったらそれぞれに絶対パス書いちゃって
相変わらずものすごい勘違いしてるね・・・
いや、勘違いっていうか、>>656で示した手法を全く理解できてないみたいね。
誰が「数百のHTMLの絶対パスを書け」なんて言ったのよ? 誰も言ってないでしょうよ。
俺が>>656で示した手法なら、絶対パスを書くファイルはconfig.php一つのみ。
せっかく他人がいろいろと具体例を挙げて説明してやってんのに、
自分がバカで理解できないからってそんな偉そうに文句つけてたら誰も教えてくれなくなるよ。
0704nobodyさん
2006/07/19(水) 02:50:58ID:???いやだから、そのconfig.phpをincludeする部分はどーすんのって話でしょうが。
そこは結局相対パスで書くのか?
0705701
2006/07/19(水) 03:42:26ID:???0707nobodyさん
2006/07/19(水) 04:31:22ID:???ユニークなID文字列をPHPで作りたいのですが、
どうするのがよいでしょうか?
tempnam()を使うとそれっぽい文字列を取得できるのですが、
同時にファイルを作成してしまうのが、余計に思っています。
0709nobodyさん
2006/07/19(水) 04:50:13ID:???http://www.google.co.jp/search?hl=ja&q=PHP+%E3%83%A6%E3%83%8B%E3%83%BC%E3%82%AF&lr=
0710nobodyさん
2006/07/19(水) 04:59:37ID:???uniqid()?もまぁありなんですが、
できれば現在時間に依存せず、完全にランダムな文字列で、
大文字も使用して、短い文字列を希望しています。。
■ このスレッドは過去ログ倉庫に格納されています