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

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

■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん2006/06/08(木) 05:09:28ID:5gGJKVO4
PHPに関するくだらねぇ質問用スレです。
ここなら本スレで回答のないお前の下らない質問に回答があるかも知れません。

まず読め【PHP マニュアル】
http://www.php.net/manual/ja/

過去スレは>>2
07127112006/06/20(火) 22:32:37ID:???
データをCSVで保存するとカンマ区切りでExcelでは読みやすくなるのですね。
0713nobodyさん2006/06/20(火) 22:33:21ID:???
>>711
Googleって知ってる?
0714nobodyさん2006/06/20(火) 22:37:19ID:???
Excelというのはなんですか?
0715nobodyさん2006/06/20(火) 22:40:47ID:???
>>714 -> >>713
0716nobodyさん2006/06/20(火) 23:05:51ID:???
>>714 = array(
0717nobodyさん2006/06/20(火) 23:29:36ID:???
くだらん釣りはスルーヨロ
07186762006/06/20(火) 23:31:39ID:???
タイミング悪くてだいぶレスが流れてしまったのですが、、
678さんが「できる」と回答していますが、どうやってやるんでしょうか?
自分ではどの関数を使ってどうやってやればいいかの
ソースの組立の予測が付きません・・。

ヒントか何か教えていただければと思います。
0719nobodyさん2006/06/20(火) 23:32:48ID:???
かなりスレ違いと思いますがお願いします。

ページA→ページBと移動する際に
パスを引き継ぎたいのですが
getではパスがばれるので×
postだとアンカーで引き継げない
となるとsessionidがベストなのでしょうか?

0720nobodyさん2006/06/20(火) 23:34:25ID:Vcobe6Xy
>>719
ヒント:暗号化
0721nobodyさん2006/06/20(火) 23:37:45ID:???
>>718
一番手っ取り早いのは正規表現で取得してくる
0722nobodyさん2006/06/20(火) 23:51:40ID:???
>>719
セッションがベスト
セッションのことをsessionidと言ってるならもうちょっと勉強ヨロシク
0723nobodyさん2006/06/20(火) 23:52:15ID:???
セッションのテストをしているのですが、
http://hogehoge.com/index.php でアクセスした時にはクッキーに保存されるのですが
http://hogehoge.com/ でアクセスするとセッションファイルは作成されるもののクッキーが発行されません。
なぜか原因が分かる方いますか?
ちなみに、session.cookie_pathは変更していなくて、/のままになっています。
07247232006/06/21(水) 00:02:45ID:???
独自ドメインのサーバーでテストしたところ、同じスクリプトで/で終わっていても正常に動作しました。
Xreaのサブドメインの方でテストすると出来ないっぽいです。
session.cookie_domainを設定して試してみましたが、やはいダメでした。
という事はサーバーの設定の関係でしょうか。
0725nobodyさん2006/06/21(水) 00:06:05ID:???
>>723-724
全てやりつくして自分ではどうにもならないって状況になってから質問しなおせ。
で、次質問するときは、phpinfoで出るセッション関連設定晒せ。
あと、例で用いるドメインはexample.comな。
0726nobodyさん2006/06/21(水) 00:07:47ID:???
>>723
おちつけ
なにが保存されないんだ
セッションとクッキーの違いは分かってるか?
クッキーの確認方法はなんだ?
ブラウザを閉じたら内容がクリアされるようなクッキーはファイルには保存されないのを知ってるな?
0727nobodyさん2006/06/21(水) 00:09:38ID:???
>>725
これ以上はもう無理そうです。

>>726
デフォルトで言うところのPHPSESSIDクッキーが保存されません。
クッキーはブラウザのクッキー表示機能で確認してます。
0728nobodyさん2006/06/21(水) 00:12:15ID:???
セッションの設定は
session.bug_compat_42OffOff
session.bug_compat_warnOnOn
session.gc_probability11
session.hash_bits_per_character55
session.gc_divisor10001000
これ以外はデフォルトのようです。
0729nobodyさん2006/06/21(水) 00:15:03ID:???
>>725
なんでexample.comじゃなきゃいけねーの?
0730nobodyさん2006/06/21(水) 00:15:05ID:???
ブラウザ=Firefoxです。
07317292006/06/21(水) 00:17:24ID:???
ごめん。俺が悪かった
0732nobodyさん2006/06/21(水) 00:27:46ID:???
すみませんお願いします。
数値を全角から半角に直したいのですが

$com1 = i18n_ja_jp_hantozen($_POST["com1".$i],"n");

と記述したところ、
Fatal error: Call to undefined function: i18n_ja_jp_hantozen()
というエラーが返ってきました。
PHP4ではまだ対応されていないのでしょうか?
0733nobodyさん2006/06/21(水) 00:33:10ID:???
>>732
こりゃまた古い関数を引っ張り出してきたもんだねぇ。
ttp://www.php.net/manual/ja/aliases.php
0734nobodyさん2006/06/21(水) 00:36:10ID:???
>>733
変更されていたのですね^^;
mb_convert_kana()で試したところも同じエラーになりました。
「mb」を使うには何か設定が必要なのでしょうか?
0735nobodyさん2006/06/21(水) 00:42:18ID:Ap/VWjSS
セッションに配列を入れて出力する仕組みを書いています。
以下のようなソースになるのですが、出力結果はArrayとなって
うまくできません。おかしい箇所を訂正・指摘していただけないでしょうか?

//送信ボタンが押された場合
if(isset($ok)){
//セッション『id』に値がある場合
if(isset($_SESSION["id"])){
array_push($_SESSION["id"],$id);
for($i=0;$i<count($_SESSION["id"]);$i++){
print "$_SESSION[id][$i]"."<br>";

}
//セッション『id』に値が無い場合
}else{
$_SESSION["id"] = array($id);
print $_SESSION["id"];
}
}
0736nobodyさん2006/06/21(水) 00:42:46ID:???
>>734
マルチバイト関数はインストール時に指定が必要
その鯖の環境では使えるのかい?
0737nobodyさん2006/06/21(水) 00:43:29ID:???
>>736
ローカルです。


extension=php_mbstring.dll
にしてあるのですが使えないのです。
0738nobodyさん2006/06/21(水) 00:48:17ID:???
>>735
最初にelseの方にいくよな?
そしてarrayを代入してそれをprintしてればarrayが表示されて当たり前だろ?

>>737
オマイが設定したと言っても本当に正しく設定してあるか分からんだろ?
phpinfo()を出したまい
0739nobodyさん2006/06/21(水) 00:53:02ID:???
>>738
出しました。
「mbstring」らしき文が見当たりません
07407352006/06/21(水) 00:59:26ID:???
>>738
それでは最初のelseではprintをせずに2回目の送信を行ったところ
forで出力してもやっぱり、Arrayっと表示されます。
※$idが最初は10次は20入れた場合

10
Array
0741nobodyさん2006/06/21(水) 01:01:42ID:???
>>739
phpinfoの
Configuration File (php.ini) Path
のphp.iniにあるextension=php_mbstring.dllの前に;が無いか
phpinfoの
extension_dirのディレクトリにphp_mbstring.dllファイルがあるか確認
0742nobodyさん2006/06/21(水) 01:03:26ID:???
>>739
じゃぁ使えないな

>>740
× $_SESSION[id]
○ $_SESSION['id']
0743nobodyさん2006/06/21(水) 01:04:37ID:???
>>741
extension=php_mbstring.dll
;はありません。

extension_dirは ./ ./ となっています
0744nobodyさん2006/06/21(水) 01:09:37ID:???
>>743
php_mbstring.dllのありかを探してそのディレクトリを
php.iniのextension_dirに指定してみれ
php.iniはphpinfoで表示された場所のファイルを修正
07457352006/06/21(水) 01:09:38ID:???
>>742
7行目のprintの箇所ですよね?
以下のようにしたのですが、状況は変わらずです・・。
print $_SESSION['id'][$i]."<br>";
0746nobodyさん2006/06/21(水) 01:11:09ID:???
>>745
742じゃないが、最後の行に
print_r($_SESSION);
で中身がどうなってるか確認してみれ
0747nobodyさん2006/06/21(水) 01:15:53ID:A9H5bJA/
extension_dirにphp_mbstring.dllの場所を設定したら解決しました。
ありがとうございます。


mb_convert_kana($_POST["com".$i],"n");
としたら、出力が「?P?P?P」になっちゃったよ;;
07487352006/06/21(水) 01:16:01ID:???
>>746
最初に10を、2回目に20をテキストボックスに入れて送信した結果です。
Array ( [id] => Array ( [0] => 10 [1] => Array ( [0] => 10 ) ) ) Array ( [id] => Array ( [0] => 10 [1] => Array ( [0] => 10 ) ) )

なんかかなり変な感じですね・・。しかも配列にArrayが入っているし・・。
全く原因が掴めません。。array_pushが悪い訳じゃないだろうし。。
0749nobodyさん2006/06/21(水) 01:18:46ID:???
>>747
mb_convert_kana($_POST["com".$i],"n","sjis");
でやってみれ
0750nobodyさん2006/06/21(水) 01:18:51ID:???
//送信ボタンが押された場合
if(isset($ok)){
//セッション『id』に値がある場合
if(isset($_SESSION["id"])){
array_push($_SESSION["id"],$id);// (3)
for($i=0;$i<count($_SESSION["id"]);$i++){
print "$_SESSION["id"][$i]"."<br>"; // (4)
}
//セッション『id』に値が無い場合
}else{
$_SESSION["id"] = array($id); // (1)
print $_SESSION["id"]; // (2)
}
}

最初はelse以降に逝くが、$idが10なら
(1)の$_SESSION["id"]はarray(10)になる。
当然(2)はArrayと表示される。
次はセッションが既にあるから上段に行って、
$idが20なら(3)で$_SESSION["id"]はarray(10, 20)になる。
当然(4)では
10
20
と表示されるはずだ、と。
この20がArrayとなっているという事は(3)の$idがArrayになってるって事だから、
この処理以前の$idの取り方に問題があるような気がする。
0751nobodyさん2006/06/21(水) 01:20:14ID:???
>>749
ありり!できました
0752nobodyさん2006/06/21(水) 01:20:38ID:???
>>748
$idがarrayぢゃないのんか?
07537352006/06/21(水) 01:23:00ID:???
>>750,752
どうも解説ありがとうございます。私もどこがおかしいのか全くわからなくて・・。

ちなみに、$idを受け取る送信ページは以下のソースです。普通のHTMLです。
<form action="session.php" method="post">
<input type="text" name="id">
<br>
<input type="submit" name="ok" value="送信">
</form>
0754nobodyさん2006/06/21(水) 01:28:26ID:???
>>753
print_r($_POST);
print_r($id);
で中身をみてみちゃどうかね。
0755nobodyさん2006/06/21(水) 01:30:56ID:???
多分

$id = $_POST["id"];

とすべきところを

$id = array($_POST["id"]);

とでもしている予感。
07567352006/06/21(水) 01:33:54ID:???
>>754
■1回目の10を入れた場合
Array ( [id] => 10 [ok] => 送信 )
10

■2回目の20を入れた場合
10
Array
Array ( [id] => 20 [ok] => 送信 )
Array ( [0] => 10 [1] => Array ( [0] => 10 ) )
0757nobodyさん2006/06/21(水) 01:34:13ID:???
質問です。
現在実行しているスクリプト名
http://localhost/test.php)だったら「test.php」
を出力したいのですが、どうすればよいのでしょうか?
07587572006/06/21(水) 01:39:01ID:???
$_SERVER['PHP_SELF'];で解決しました。
0759nobodyさん2006/06/21(水) 01:39:38ID:???
>>754
$id = てな感じで$idを代入しているとこ書いてみてくり
0760nobodyさん2006/06/21(水) 01:40:07ID:???
そういえば、csvだと直リンで中身見られることはないの?
0761nobodyさん2006/06/21(水) 01:43:47ID:???
>>760
見ることもできるし、見られなくすることもできる
いろいろな設定次第
07627352006/06/21(水) 01:47:32ID:???
>>759
特に代入してないです。>>735で書いたとおりです。
別に$idはそのまま出力される(値が入る)かと思いますが。。
0763nobodyさん2006/06/21(水) 02:01:38ID:B7JejGVK
>>762
展開してるのね。了解。

■2回目の20を入れた場合
10
Array
Array ( [id] => 20 [ok] => 送信 )
Array ( [0] => 10 [1] => Array ( [0] => 10 ) )
↑ここで最後の$_SESSION[1]が配列になっているし、中身が10のまま

なんか、セッションがあろうがなかろうが関係ないんじゃないか?

$_SESSION["id"][] = $id;
for($i=0;$i<count($_SESSION["id"]);$i++){
print $_SESSION["id"][$i]."<br>";
}
07647352006/06/21(水) 02:24:29ID:???
>>763
ご説明ありがとうございます。
//セッション『id』がある場合

} //最後から二つ目の}

をコメントアウトしました。そして763さんのコードを追加してみたのですが、
2回目の20を入れた処理で
10
Array
Array ( [id] => 20 [ok] => 送信 )
Array ( [0] => 10 [1] => Array ( [0] => 10 [1] => Array *RECURSION* ) )

このようになります。あまり変わりないような気がします・・。
07657352006/06/21(水) 02:27:43ID:???
テストをWindowsXPのローカル上で行っていまして、
PHPが5.1.4なのですが、あまり関係ないですよね・・。
session_start();もしているからセッションが有効になっているはずだし・・。
0766nobodyさん2006/06/21(水) 02:28:34ID:???
>>764
いや、735をいっそのことこうしたらどうかと。
//送信ボタンが押された場合
if(isset($ok)){

$_SESSION["id"][] = $id;
for($i=0;$i<count($_SESSION["id"]);$i++){
print $_SESSION["id"][$i]."<br>";
}

}
$_SESSION["id"]があるかどうかで
何か処理が変わるの?735だと単純に$idを追加すればいいだけのような気がするんだけど。
07677352006/06/21(水) 02:49:46ID:???
>>766
変わり無しです・・。766さんのコードに変更したのですが、

10
Array

というエラーが出ます。環境による問題ですかね。。
0768nobodyさん2006/06/21(水) 02:53:28ID:???
>>767
よっしゃ。とりあえずそのファイルどっかに上げてみてみないか?
もしくはそんなに長くないコードならここに貼り付けるか
07697352006/06/21(水) 02:55:19ID:???
【送信前・index.html】

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=euc-jp">
<title>セッションテスト</title>
</head>

<body>
<form action="session.php" method="post">
<input type="text" name="id">
<br>
<input type="submit" name="ok" value="送信">
</form>
</body>
</html>
07707352006/06/21(水) 02:57:18ID:???
【送信後・session.php】

<?php
session_start();
?>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=euc-jp">
<title>セッション受け取り</title>
</head>

<body>
<?php
//送信ボタンが押された場合
if(isset($ok)){
$_SESSION["id"][] = $id;
for($i=0;$i<count($_SESSION["id"]);$i++){
print $_SESSION["id"][$i]."<br>";
}
}
?>
<input type="button" onClick="history.back()" value="前に戻る">
</body>
</html>

何度もお手数おかけします。。よろしくお願いします。
0771nobodyさん2006/06/21(水) 03:10:26ID:???
>>770
WInXP,Apache1.3,php5.0.3
結果
10
20

2回目の$_SESSIONの中身
Array
(
[id] => Array
(
[0] => 10
[1] => 20
)

)
ただし、register_globals Offのため
$id=$_POST["id"];
$ok=$_POST["ok"];
を追加した

うまくいってるけど?
0772nobodyさん2006/06/21(水) 03:11:30ID:???
あれ?
$_SESSION["id"][] = $id;
    ~~~~~~~~~~~
こういう書き方ってありだっけ?
0773nobodyさん2006/06/21(水) 03:14:06ID:???
>>772
[]のことなら、全然あり。最後に追加される
http://jp.php.net/manual/ja/language.types.array.php
07747352006/06/21(水) 03:23:08ID:???
>>771
テストしていただいてありがとうございます。
うちはApache2.0.52とPHP5.1.4ですが、やはりなりません。
Linux+PHP4系のレンタルサーバにファイルをアップしても
同様に、
10
Array

という表示です。どうなっているのか・・。
07757352006/06/21(水) 03:26:12ID:???
わかりました!!

$_SESSION["id"][] = $id;

$_SESSION["id"][] = $_POST["id"];

とすることで、771さんと同じ結果になりました!
ちょっと理由がわからないのですが、変数を$_POSTにしないといけないみたいですね。。

長い間、お付き合いいただき、ありがとうございます。
また勉強します。
0776nobodyさん2006/06/21(水) 03:27:47ID:???
>>774
恐らく$idがおかしそうなので、最初に
<?php
session_start();
$id=$_POST["id"];
$ok=$_POST["ok"];
?>
ってやてみたらどうかな
0777nobodyさん2006/06/21(水) 03:30:24ID:???
>>775
了解、乙
0778nobodyさん2006/06/21(水) 03:45:25ID:???
>>775
もう見て無いかもしれないが、よく考えたら
register_globalsがOnなため、$_POSTと$_SESSIONの両方の["id"]が
$idに展開されて変になっていたのではないかと
$_SESSION["id"]を$_SESSION["xid"]にするとうまくいくべ
0779nobodyさん2006/06/21(水) 05:43:39ID:r7tfflxK
既に何かデータが存在するファイルに上書きをする時は、w+でいいんですか?
0780nobodyさん2006/06/21(水) 06:20:11ID:???
w+でもいいけど既にあるんだったらwでいいんじゃない?
0781nobodyさん2006/06/21(水) 06:24:08ID:???
書くけど書いたのをファイルを開いたまま読みたいときw+
書くだけw
0782nobodyさん2006/06/21(水) 06:27:43ID:r7tfflxK
wでやってるんですが、上書きできないんですよね
何故でしょう? こんな感じです。

if (is_writable($file)) {
if (!$handle = fopen($file, 'w')) {
print "Cannot open file ($file)";
exit;
}
for($i; $i <= $count-1; $i++){
$files_rows = preg_split("/,/", $files[$i]);
$serial = $files_rows[0];

if($files_rows[16] == $_POST['original']){
$mod_file .= $add_data."\n";
}
else{
$mod_file .= $files[$i]."\n";
}
}
flock($handle,LOCK_EX);

if (!fwrite($handle, $mod_file)) {
print "Cannot write to file ($file)";
exit;
}
fclose($handle);
}
0783nobodyさん2006/06/21(水) 06:45:56ID:r7tfflxK
ポインタ指定してないのが原因でしょうか?
0784nobodyさん2006/06/21(水) 07:00:19ID:???
if (!$handle = fopen($file, 'w')) {
for($i; $i <= $count-1; $i++){

ぱっと見
この2つの行になんだか違和感。

普通はこうかな
if (!($handle = fopen($file, 'w'))) {
for($i=0; $i < $count; $i++){
0785nobodyさん2006/06/21(水) 07:01:47ID:???
jpeg画像を表示ではなく、ダウンロードさせるにはどのようにすればよいのでしょうか?
0786nobodyさん2006/06/21(水) 07:03:34ID:???
>>782
段階を追って確認してみれば?
まず
if (is_writable($file)) {
はちゃんと通過できてるの?
あとぶっちゃけ
$handle = fopen($file, 'w');
の1行だけ実行したら中身空っぽの0バイトファイルになるはずだけどどうよ?
これで0バイトになったら上書き自体はできてるってことだ。
こういうのはシンプルなコードで順次確認が基本だよ。
0787nobodyさん2006/06/21(水) 07:05:18ID:???
>>785
画像データの標準出力への出力前にheader()を使って別のファイルタイプとして認識させる。
0788nobodyさん2006/06/21(水) 07:47:46ID:???
Parse error: parse error, unexpected '{', expecting '(' って何ですか?
0789nobodyさん2006/06/21(水) 07:48:51ID:???
>>788
文法エラー。カッコの数が合ってない。
0790nobodyさん2006/06/21(水) 08:02:39ID:???
構文解析エラー: '('が来ると思ってたのになんか'{'がキタこれナニこれ
0791nobodyさん2006/06/21(水) 08:12:35ID:???
phpではmethod=getのデータは$_GET['']で受け取るんかいな?
0792nobodyさん2006/06/21(水) 08:13:39ID:???
>>791
他にも方法はあるけど基本はソレ
0793nobodyさん2006/06/21(水) 08:13:59ID:???
その通り。つかマニュアル嫁
0794nobodyさん2006/06/21(水) 08:32:08ID:???
配列の使い方の関係で、どうしても定義してないキーが出ちゃう場合があって
noticeエラーが頻発しちゃうんだけど、これって無視しても特に問題ないよね?

notice出ないように修正することも出来なくはないけど、
すごく無駄なコードが増えちゃうしスパゲティ化するから、
かえって修正しないほうがいい気がしてる。
0795nobodyさん2006/06/21(水) 08:36:47ID:???
noticeエラーは開発時のデバッグお助け機能くらいで考えとけばいいんじゃねーかと俺は考えてる。
全部潰せばより堅牢にはなると思うが、正直なとこ過剰としか思えん。
ちゃんとデバッグできない低脳な人は片っ端から潰した方がいいかもしれんけどな。
0796nobodyさん2006/06/21(水) 08:39:03ID:???
ポリシーをどうするかは本人の自由だと思うので好きに決めていいと思うけど、
> すごく無駄なコードが増えちゃうしスパゲティ化する
ってのが気になるな。
そんなにあちこちで定義されていないキーを使うってのは、スクリプトの構造自体に問題があるんじゃないかなぁと。
0797nobodyさん2006/06/21(水) 09:04:22ID:???
>>794
$value = @$cache[$key];

マニュアル嫁ボケ
http://www.php.net/manual/ja/language.operators.errorcontrol.php
0798nobodyさん2006/06/21(水) 10:14:05ID:???
>>795 親切といえば親切だし、過剰といえば過剰だよね。

>>796 あちこち・・・ってほどでもないんだけど、ある一つの処理に関する配列において、
   要素の数が場合によって0〜9個まで、まちまちになるのよ。で、それをHTMLテンプレに埋め込んだ変数(配列)に
   展開するときに、noticeが出ちゃう。

>>797 エラーの抑制方法はもちろん知ってるわけで・・・ 質問の意図が分からなかったんかな?
0799nobodyさん2006/06/21(水) 10:47:55ID:???
>>798
じゃぁ無視するとエラーログがとんでもないことになる。
どこまで保存するかの設定にもよるが。
0800nobodyさん2006/06/21(水) 11:06:35ID:???
>>798
>>796も書いてるが、存在しないキーでエラーが出たり、
それを修正するためにスパゲティコードになる時点で根本的に設計がおかしい
まあ、好きにすれば?としか答えようがないな
0801nobodyさん2006/06/21(水) 11:08:28ID:???
配列を初期化すればいいんじゃないの。
0802nobodyさん2006/06/21(水) 11:20:48ID:???
任意の項目名で自由にHTMLテンプレ上に表示させたいとかゆー類っぽいな
0803nobodyさん2006/06/21(水) 11:32:54ID:???
素直に @をつけるか、 Noticeメッセージを表示しないように設定するかのどっちかだな。
0804nobodyさん2006/06/21(水) 11:44:35ID:NAuR8t7O
PRINTかECHOで複数行を簡潔に記述したいのですがどう書けばいいのでしょうか?
以下のようにしても動きませんでした。一行ずつ関数書くのは省きたいです。


PRINT"
あかさたな
テスト
りんご
";
0805nobodyさん2006/06/21(水) 11:54:39ID:???
>>840

?>
あかさたな
テスト
りんご
<?php
0806nobodyさん2006/06/21(水) 12:00:42ID:???
>>804
ttp://jp.php.net/manual/ja/function.echo.php
マヌアルは読んだか?
0807nobodyさん2006/06/21(水) 12:36:15ID:???
>>804
ttp://www.php.net/manual/ja/language.types.string.php#language.types.string.syntax.heredoc
マヌアルは読んだか?
0808nobodyさん2006/06/21(水) 12:48:19ID:???
print <<< HTML
りんご
だいすき
ぱいなっぷるも
すき
HTML;
0809nobodyさん2006/06/21(水) 13:00:52ID:???
sendmailを使いたい場合は何か設定をしなくてはいけないのでしょうか?
0810nobodyさん2006/06/21(水) 13:16:50ID:???
めいらーでーもん
0811nobodyさん2006/06/21(水) 13:17:36ID:???
>>809
ttp://coronado.s8.xrea.com/php/ref.mail.php
マニュアルをどうぞ。
■ このスレッドは過去ログ倉庫に格納されています