【PHP】質問スレッド Part5
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
02/09/11 14:15ID:FWA0CpdU■本家
http://www.php.net/
■日本 PHP ユーザ会
http://www.php.gr.jp/
■PHP マニュアル
http://www.php.net/manual/ja/
■PEAR マニュアル
http://pear.php.net/manual/ja/
過去スレ, 関連スレ及び注意事項等は、
>>2-10あたりにきっと誰かが……。
0268260
02/10/02 07:53ID:???なるほど。そういう考え方ですか。
表示時にCOOKIEの使用可否をチェック
↓
COOKIEが取得できないなら、書き込みフォームを表示しない
または、書き込みできない旨表示
とかもいけますね。
ありがとうございます。
0269254
02/10/02 11:18ID:???ありがとうございます。とりあえず、cookieを使う方向でやってみようと思います。
ただ、cookieを使う方法が分からないです・・・・
どこに何を記述すれば解決するでしょうか?
教えてちゃんで本当にすみません。
0271名無しさん@お腹いっぱい。
02/10/02 17:18ID:???0272nobodyさん
02/10/02 19:49ID:???http://jp.php.net/manual/ja/function.setcookie.php
0274nobodyさん
02/10/02 23:11ID:N6nWPgxI0276age
02/10/03 14:13ID:???どう書けばいいんでしょうか?
ただ画像を表示させるだけではダメです
画像にリンクをつけたいんです。
ご伝授宜しくお願い致します。
0277nobodyさん
02/10/03 16:18ID:???http://php.s3.to/bbs/up/randam.phpsを改造
-----------------------------------------
$folder = "./img/";
$handle = opendir($folder);
while ($file = readdir($handle)) {
if (!is_dir($file) && preg_match("/\.(gif|jpe?g|png)$/i",$file)) {
$filelist[] = $folder.$file;
}
}
closedir($handle);
mt_srand((double)microtime()*1000000);
$randval = mt_rand(0, (count($filelist)-1));
echo "<A href=\"$filelist[$randval]\"><IMG src=\"$filelist[$randval]\"></A>";
------------------------------------------
0278nobodyさん
02/10/03 16:32ID:???ご苦労さん。ところでそのスクリプトを>>276な質問をするヤシが
それなりに使いこなしてくれると思う?
このようにやったけどうまくいかね、教えろ。
ってならまだわかるんだけどな。
0279nobodyさん
02/10/03 16:49ID:cJeLz4gO実際にやってるサイトを見つけて、その管理者に聞けば?
0281nobodyさん
02/10/03 17:31ID:???0282ノンノン
02/10/04 11:39ID:rtjubDTm送信ボタンを押すとエラーページを表示させるようにさせたのですが、
そこからまたフォームへ戻ると入力された内容がすべて消えてしまいました。
Javascriptのhistory.back()やブラウザの[戻る]のどちらも同じ現象です。
セッションを外すとそういうことは起きません。
エラー表示はページを変えずにJavascriptでも可能ですが、Javascriptを
無効にしている人もいるのでできればそれは使いたくないんです。
こういった場合、どうすれば良いのでしょうか。
0283nobodyさん
02/10/04 11:51ID:zNdIxOGzファイルUPするのに<input type=file>
でPOSTすると
C:\Documents and Settings\Administrator\デスクトップ\プログラム\readme.txt
以下のような文字列が帰ってきます。
これをファイイルの部分だけ切り出すのて?
正規表現初心者です。うーんどうすればいいの?
置き換えならともかくループして1文字ずつよむならともかく
わかりません。
0284nobodyさん
02/10/04 12:07ID:???php.iniのキャッシュがらみの設定を変更すると[戻る]でも内容を保持してくれる。
あと、戻るはやめてエラーページからフォームのページへ移るボタンを作って
入力内容を再表示させる方法の2通りあるよ。
本来ならキャッシュに頼らず、後者の方法で回避する方がいいと思うけど、
俺もついつい戻るにしてしまうからな。
>>283
正規表現でなくとも、最後の\以降の文字列を取る。ってかんじなら文字列関数で
何とかできるだろ。
ちなみにここはPHP質問スレだが、ひょっとしてマルチ?
0285ノンノン
02/10/04 12:25ID:rtjubDTm> php.iniのキャッシュがらみの設定を変更すると[戻る]でも内容を保持してくれる。
> あと、戻るはやめてエラーページからフォームのページへ移るボタンを作って
> 入力内容を再表示させる方法の2通りあるよ。
なるほど、フォームへ入力した内容を逆送信という形ですね。
ただ、レンタルサーバを利用しているので前者は無理かな?
で、一つ試しにやったことなんですが、セッションを外しても
また後にセッションを組み込んだページへ移行しても、セッションの
内容を保持してるんです。
なので、「フォームのページだけセッションを外して送信したら再び
セッションを組み込む」なんてことはできるような気がするんですが、
これって邪道でしょうか?
0286nobodyさん
02/10/04 12:49ID:???.htaccessでphp.iniの設定値を変更できるものもある。
で、肝心の設定項目を未だに思い出せない。調べりゃすぐわかるけどね。
値の方をpublicからprivateに変更すりゃよかったと思うけど、https時のIEの
バグ?がらみで俺はnoneにしてある。これでも[戻る]でも残る。
>なので、「フォームのページだけセッションを外して送信したら再び
>セッションを組み込む」なんてことはできるような気がするんですが、
>これって邪道でしょうか?
何がやりたいのか全体像が判らない。なんとなくだが、邪道というより
無駄というかちゃんと理解しているのかと小一時間...
0287nobodyさん
02/10/04 13:51ID:???下記のようなスクリプトを書いてみたもののエラーが出て印字できません.
何か手がかりをお持ちでしたらご教授ください。
-----------------スクリプトの内容-------------------
<?
Header("Content-type: application/pdf");
$pdf = pdf_open();
pdf_set_info_author($pdf, "Sample");
PDF_set_info_title($pdf, "Sample");
pdf_set_info_creator($pdf, "See Author");
pdf_set_info_subject($pdf, "Sample");
PDF_begin_page($pdf, 842, 595);
PDF_add_outline($pdf, "Page 1");
pdf_set_text_rendering($pdf, 0);
pdf_set_font($pdf, "HeiseiMin-W3", 10, "EUC-H");
pdf_show_boxed($pdf, "hoge",100,100,100,100,left); ←
PDF_end_page($pdf);
PDF_close($pdf);
fclose($fp);
$fp = fopen();
header( "Content-type: application/pdf");
fpassthru($fp);
fclose($fp);
?>
------------------------------------------------------
------------エラーの内容-----------
<b>Fatal error</b>: PDFlib error: PDF_show_boxed not supported for CID or EBCDIC encoding in
<b>/usr/local/apache/htdocs/pdf/sample3.php</b> on line 15
0288nobodyさん
02/10/04 14:22ID:H7Rb5fovsession.cashe_limiter = public
0291ノンノン
02/10/04 16:34ID:rtjubDTmおーっ、これですか。早速、.htaccess に書き加えて。。。ガーン!!
「表示できません」と出ました。トホホ。
記述法まで教えていただくわけにもいかず、あちこち調べてみましたら、
session_cache_limiter();
という関数を使えば良いという説明がありましたので、これを利用させて
いただいたところ、できました。
> 何がやりたいのか全体像が判らない。なんとなくだが、邪道というより
> 無駄というかちゃんと理解しているのかと小一時間...
一時間も悩んでいただいたのですね。
ご迷惑をおかけしました。また、質問の際はヨロシクね。
ありがとうございました。
0292質問
02/10/04 16:43ID:zDqIUs3vで最期のスラッシュ部分を削るとよくdirectry格納庫が見えるんですけど
これは犯罪なんですか?
0293質問
02/10/04 17:44ID:???0295nobodyさん
02/10/04 23:07ID:???それはマズイよ。早いとこ出頭したほうがいいと思います。
■本家
http://www.php.net/
■日本 PHP ユーザ会
http://www.php.gr.jp/
■PHP マニュアル
http://www.php.net/manual/ja/
■PEAR マニュアル
http://pear.php.net/manual/ja/
0296nobodyさん
02/10/05 00:05ID:zZFr4hqnとあった時、$dataを表示して $name を展開することは可能ですか?
0297nobodyさん
02/10/05 00:08ID:kOTZvqT10298nobodyさん
02/10/05 00:09ID:XGmx03Nq0299nobodyさん
02/10/05 00:17ID:zZFr4hqnでダメだったので、なにか方法あるかなぁと思いまして…。
0300nobodyさん
02/10/05 00:34ID:???$dataはlist - explodeで外部ファイルから持ってきているので、
その辺に問題があるのでしょうかね。
0301nobodyさん
02/10/05 00:34ID:???そういやいままでそんなことしたこと無かったよ。
$data = "<td>"."$name."</td>";
ってやってたんだが、>>296式で試しにやってみたら
ちゃんとでけた。 当然て言えばそうなんだが、なぜいままで
やらなかったのだろう...
echo $data; で表示したよ。
0303nobodyさん
02/10/05 00:54ID:???0304300
02/10/05 00:57ID:???$file = file("data.html");
$html = implode('', $file);
list($head, $main) = explode ("<!--cut-->", $html);
この$mainに<td>$name</td>などが入っているのですが、(echoで確認済み)
前記のように展開がうまくいきません。
普通に$main="<td>$name</td>"とした場合と↑との違いは何なのでしょう?
0305nobodyさん
02/10/05 01:37ID:???すんげぇ発想だな。
展開しないのだったら素直に諦めろ。
ちなみに
$data='<td>$name</td>';
とかだったら展開しないだろ。右辺の扱いが違うんだよ。
0307nobodyさん
02/10/05 10:48ID:???0308nobodyさん
02/10/05 16:28ID:ERAiXWsY「http://pc.2ch.net/test/read.cgi/php/1031721334/l50」の
「/php/1031721334/l50」の部分をread.cgiで取得する方法を教えて下さい。
すごく簡単にできたような気がするんだけど、コード書くの久しぶりだから忘れた…
0309nobodyさん
02/10/05 16:39ID:PH1wtlYb.htaccessと似たようなことがしたい(特定のホストを弾くなど)のですが・・・
0311308
02/10/05 17:11ID:???0312sleepy galaxy
02/10/05 17:18ID:KAWXlSozsleepy galaxyだよ
http://www.msleep.com/jp/sg/
( ´,_ゝ`)( ´,_ゝ`)( ´,_ゝ`)( ´,_ゝ`)( ´,_ゝ`)
0313nobodyさん
02/10/05 17:26ID:???<?
$r_addr = getenv("REMOTE_ADDR");
$r_host = getenv("REMOTE_HOST");
if($r_host=="" or $r_host==$r_addr){
$r_host = @gethostbyaddr($r_addr);
}
$hantei = ereg("拒否したいホストA|拒否したいホストB", $r_host);
if($hantei == 1){
header("Location: http://www.2ch.net/"); //飛ばし先
}
?>
0314309
02/10/05 17:39ID:PH1wtlYbありがとうございます。でもコピペしてみたら、
エラーが発生してしまいました……どこに問題があるんでしょうか。
0315nobodyさん
02/10/05 18:43ID:???0316309
02/10/05 20:08ID:???エラーメッセージはこんな感じです。
Parse error: parse error, unexpected '@' in /****/****/****/****/index.php on line 35
0317名無しさん
02/10/05 20:21ID:???としたとたん、$aaの中身が
"1\r\n2\r\n"
になってしまってウザイのですが、どうやって回避すればいいのでしょうか?
おしえてください!
verは4.2.2でし、、
0318名無しさん
02/10/05 21:12ID:pMN6x92iうそついていました
問題なく内部ではうごいていました
0319300
02/10/05 21:22ID:???デザインを別ファイルにしたかったので、こんな意味不明なことを。
(よくある掲示板スクリプトの「スキン」みたいに)
何か別の方法考えてみます…。
0320313
02/10/05 22:43ID:???$r_host = @gethostbyaddr($r_addr);
gethostbyaddr関数の前の「@」が邪魔してんのかな。
無くても大丈夫だからとってみたら。
うちではあってもなくても動くけど。
0321nobodyさん
02/10/05 22:43ID:5gdnUDvW画像をresizeして出力することはできるのですが、
縦のものを横にするようなことはできないんでしょうか?
スレ違いだったらスマソ。
0322nobodyさん
02/10/06 00:56ID:FiROMDEK<ul>
</ul>
この部分があって、これを取り除きたいのですが、
厨房なのでわかりません。
$hoge = ereg_replace("<ul>\n\n</ul>","",$hoge)
このようにしていますがだめっぽです。
ご教授おねがいします。
0323nobodyさん
02/10/06 01:07ID:???>
>
></ul>
\nが3回あるけど?
0324nobodyさん
02/10/06 01:12ID:FiROMDEKそれしてもだめぽでした
0325hmk
02/10/06 01:34ID:???$hoge = ereg_replace("<ul>.*</ul>", "", $hoge);
0326nobodyさん
02/10/06 02:08ID:FiROMDEKそれだめなんすよー
<ul>
<li>ほげ
</ul>
ってのは 消したらだめなんですよー
0328nobodyさん
02/10/06 02:26ID:FiROMDEK<ul>と</ul>の間に2個の改行が入っている場合っす。
0330nobodyさん
02/10/06 02:29ID:FiROMDEKといいますと?
0331hmk
02/10/06 02:32ID:???か
$hoge = ereg_replace("<ul>\r\n\r\n\r\n</ul>", "", $hoge);
を試してみよ。
0333hmk
02/10/06 03:06ID:???Windows環境で編集されたファイルの標準的な改行は復帰+改行(\r\n)である。
また、UNIX系では\nのみ、Macでは\rのみである。
PHPにおいて、出力する場合は\nとしておけば通常は問題ない。
ただし、クライアントから送信されてきたデータを扱う場合には、改行コードを考慮に入れる必要がある。
複数のOSを考えなければならない場合、改行コードを正規表現(\r\n|[\r\n])で扱うのが簡便であろうか。
うんこ食って寝ます。。。
0334nobodyさん
02/10/06 03:12ID:FiROMDEKだめっぽですねー
0335hmk
02/10/06 03:19ID:???まだうんこ食ってないので即レスしますが、
だめぽな原因が、なにか文字列の置換とは別のところにあるのでは?
差し支えなければ、ソースを晒してみよ。
儂か、ほかの誰かが原因を教えてくれるだろうから。
0336nobodyさん
02/10/06 03:36ID:FiROMDEKソースはあれだけっすけど
dmozのHTMLをちょこちょこいじくってます
0337hmk
02/10/06 03:51ID:???もっと質問上手になって下ちい。
つまり、自分と同じ状況を相手が再現できるようにしなければなりまそん。
そうでない場合、皆は答えたくても憶測で答えるしかできまそん。
儂も儂で、実はPHPを動かす環境をもってなくて悪いのですが、、、
0338hmk
02/10/06 04:05ID:???また、<ul></ul>間に「2個の改行が入っている場合」というのを「表示するべきデータがない場合」と拡大解釈するとして、
$hoge = ereg_replace("<ul>[:space:]*</ul>", "", $hoge);
を試してみよ。
もう本当にうんこを食って寝ます。。。
0339hmk
02/10/06 04:08ID:???$hoge = ereg_replace("<ul>[[:space:]]*</ul>", "", $hoge);
でした。
0340nobodyさん
02/10/06 04:51ID:???あそこは糞ですよ。
統率執れてないし。
0341駆け出し
02/10/06 08:28ID:XXgIkL71$hoge = ereg_replace("\r\n", "", $hoge);
$hoge = ereg_replace("\n", "", $hoge);
$hoge = ereg_replace("\r", "", $hoge);
こういう事?
0342名無しさん
02/10/06 08:43ID:???http://plaza.rakuten.co.jp/a240a/
0343駆け出し
02/10/06 08:54ID:6TGeGVMz逝ってきます。
0344316
02/10/06 13:49ID:???>>320
試しに @ を外してみたのですが、やはり動作しませんでした。
バージョンは4.2ですが、何か関係があるのでしょうか?
度々質問してすみません。
0345nobodyさん
02/10/06 14:38ID:pKfa3/8wバージョンは4.2
$addr = $_SERVER['REMOTE_ADDR'];
$host = $_SERVER['REMOTE_HOST'];
$acpos = strstr($addr, "拒否したいホストA|拒否したいホスト");
if($acpos) header("Location: http://www.2ch.net/"); //飛ばし先
0346nobodyさん
02/10/06 15:15ID:???ありがとうございます。でも、試したところまたエラーが出てしまいました。
Parse error: parse error in /****/***/****/****/index.php on line 31
ちなみに31行目は
if($acpos) header("Location: http://www.2ch.net/"); //飛ばし先
の部分です。
何か打つ手がありましたら教えて下さい。
0348313=320
02/10/06 16:37ID:???おー、strstr()関数って初めて知った…俺も触って1週間の素人なので。
ereg使うまでもないときは便利ですね。
>>346
345をそのままコピペしてるとして、
「拒否したいホスト」の部分にリモートホストのドメイン名
(例えばiij.ad.jpとか)を書いてるとしたら、動かない。
345のスクリプトは$hostは見ないで、$addrで判断してるから、
「拒否したいホスト」はIPアドレスで指定しないといけない。
あと、最後の行(Parse Errorが出てる文)も動かないかな?
ちっと345を元にして直してみた。4.2.2で動作してます。
index.php内に記述
<?
$host = $_SERVER['REMOTE_HOST'];
$acpos = strstr($host, "拒否したいホストをドメイン名で");
if(isset($acpos)) header("Location: http://www.2ch.net/");
?>
0349nobodyさん
02/10/06 16:48ID:???うちで試してみたけど動いたよ
1. 省略せずに書いてみる
2. コメントを消してみる
if( ... ){ header(" ... ") }
else{ print ("OK"); }
parseエラーの行数が気になる
なんかのプログラムの途中に入れてるみたいだけど単独で試してみたら?
0350346
02/10/06 16:53ID:???>>348
ありがとうございます。でも、またしてもエラーが出てしまいました…
Warning: Cannot add header information -
headers already sent by (output started at /****/***/***/***/index.php:16)
in /****/****/****/****/index.php on line 27
27行目は
if(isset($acpos)) header("Location: http://www.2ch.net/");
の部分です。同じ環境なのにどうして動作しないんでしょうか。
0351nobodyさん
02/10/06 17:12ID:???header("Location: http://www.2ch.net/");
の前に何か出力してないか?
<html><body>
<?
header("Location: http://www.2ch.net/");
?>
もダメだぞ
0352313=320=348
02/10/06 17:12ID:???むむむ、まだダメなんだ。
>>349の言うとおり、単独で試したほうがよさそうな。
0354350
02/10/06 17:43ID:???>>349,>>351
ありがとうございました。単独で試したら動作しました。が、
自分が2chに飛ばされてしまいました。
もちろん、自分のホスト名は記述してません。
何故なんでしょうか…
0355nobodyさん
02/10/06 18:39ID:???<?php
$host = $_SERVER['REMOTE_HOST'];
$acpos = eregi("拒否ホスト名",$host);
if($acpos){
header("Location: http://www.2ch.net/");
}else{
print "飛んでない";
}
?>
0356354
02/10/06 19:03ID:???>>355
上手く動作しました! ここまで色々情報を頂き、
皆さん本当にありがとうございました。
0357313=320=348
02/10/06 19:12ID:???おー、うまくいったのね、よかったね。
>>355のスクリプト、俺の環境(4.2.2)で試すとうまく動かない…
ホスト自体が取得できてないからなんだが、これって環境の問題かな?
スクリプトの問題じゃないのは明白なので不思議だ。
やっぱ自分のとこでは>>313式がちゃんと動くようです。
<?
$addr = getenv("REMOTE_ADDR");
$host = getenv("REMOTE_HOST");
if($host == "" or $host == $addr){
$host = gethostbyaddr($addr);
}
$hantei = ereg("拒否ホストA|拒否ホストB", $host);
if($hantei == 1){
header("Location: http://www.2ch.net/");
}
?>
0358nobodyさん
02/10/06 22:23ID:???それは鯖の設定でホストが抜けない様になってるんだよ
だからgethostbyaddr()関数を使って、IPアドレスから
ホストを問い合わせる必要がある。
そんな余分な処理をするより、IPアドレスで制限した方が
負担が少ない。
0359nobodyさん
02/10/06 22:28ID:???ここのマニュアルにある、
> "\0..\37" のようにcharlistに範囲を指定可能で す。この場合、アスキーコードが 0 から 31 の範囲の文字は全てエスケー プされます。
これってどういう意味?単なるtypo?
0361359
02/10/06 23:58ID:???うーん、どこをどう読んでも
"\0..\37"ってのが、どうして"0から31"になるのか理解できないんで、
どういうことなのか御教授キボンヌ。
0362359
02/10/07 00:04ID:???たびたびスレ汚ししてスマン>ALL
>アスキーコードが32未満または126より大きい文 字は、8進表現に変換されます。
ここを見落としてた。
0363荒川太郎
02/10/07 17:52ID:bKtEI8Ri特定ディレクトリ以下の、パス情報をパラメータとして取得することはできるでしょうか?
例:
http://hogehoge.com/test/param1/param2
上記の場合、
1.test/ 以下のパス情報は無視されて、hoge.php が呼ばれる。
2.test/ 以下の param1/param2 の情報を hoge.php の中で使用する。
Servlet では同じようなことを、tomcat の設定ファイルでやっていたんですけど、
PHPでやらなくてはならなくなり、いろいろ調べているのですが、いい方法がみつかりません。
ちなみに tomcat では web.xml で
<servlet-mapping>
<servlet-name>
HogeHogeServlet
</servlet-name>
<url-pattern>
/test/*
</url-pattern>
</servlet-mapping>
というような設定をして行っていました。
apache+PHP でも同様のことができるのでしょうか?
0365hmk
02/10/07 18:41ID:???■ このスレッドは過去ログ倉庫に格納されています