スレッド表示 | フラット表示〕 全トピック 920 件中 495 番目 次≫ ≪前

どうしてもわかりません

created: 2005-01-06 16:31 | modified: 2005-01-14 16:45 | reply: 9

[2029] どうしてもわかりません

user: オレンジ | created: 2005-01-06 16:31
先日投稿したばかりですが、一日中同じことを繰り返してギブです。
かれこれ20時間は同じことしてます(泣)

画像のアップロードをしたいのですが、送信を押すと
Warning: copy(/img/***.jpg) [function.copy]: failed to open stream: No such file or directory in C:(フォルダ名)
と出て、全くアップロードができません。
phpマニュアルとか、熟読してもさっぱりわかりません。

そもそもアップロードには何が必要なのでしょうか?
ffftpのソフトがなかったり、自分のホームページを持ってないとできないものなんですか?
パーミッション設定もffftpがなくてはできないんですか?
(つまりアパッチ+php5だけでlocalhostで接続しても無理か?)

それとphp.iniの設定で、upload_tmp_dir = "/img"としてみたのですが、この設定がどう影響するのかわかりません。
(そもそもここの設定を変える必要はあるのか?他にも変える箇所はあるのか?)

また、アップロードに成功すると、どういった感じでファイルに保存されるんでしょうか?
imgフォルダにポンと画像ファイルが自動的に作られるイメージしか湧いて来ません。

詳しい方、どんなことでも構いませんので、順を追って、なるべくわかりやすく教えてください。
私全くの初心者で、要領が悪いのか、300回ぐらい試行錯誤を繰り返してもう体力・精神的にダウンです。
reply: 2030 返信 編集 削除

[2030] 原因はこれでしょうか…?

user: オレンジ | created: 2005-01-06 19:43
また追加してすみません。
windowsXPの環境で、実は私PHP5のphp.iniをsystem32に置いているのですが、まずかったでしょうか?
本来ならwindowsフォルダの中に置けと本などには書いてあるのですが、
extensionでphp_mbstring.dllとphp_mysql.dllの;をはずし、
windowsフォルダに置いて、アパッチ起動すると、
この二つのdllで
「指定されたモジュールが見つかりません」という悲しいお知らせが出たためです。
もしsystem32にphp.iniを置いたから、
アップロードできないのでしたら、
それに関するアドバイスも頂けたらと思います。
Parent: 2029  reply: 2031 返信 編集 削除

[2031] アップロードテストコード

user: ゆうじ | created: 2005-01-06 20:56
こんばんわ。ここの管理人です。
いろんな要素が絡んでるので混乱されてるようですね。
心境お察しします。

> (つまりアパッチ+php5だけでlocalhostで接続しても無理か?)

ウェブサーバ + PHP が稼動中のコンピュータがあれば出来ますのでご安心を。


php.ini は特に変更せずともよいのですが、
あえて設定するなら

upload_tmp_dir = "D:/tmp"

のように、Windows用の書き方に直すべきです。


PHPマニュアルのサンプルを元に
アップロードのテストコードを書いてみました。
上記 upload_tmp_dir を訂正したうえで、
アップロードの確認にお使いください。

● uptest.php
<html>
<body>
<p>
<?php
if(isset($_FILES['userfile'])) {
// ここはご自身の環境に合わせて変えてね
$uploaddir = 'D:/home/myname/public_html/images/';

$uploadfile = $uploaddir. $_FILES['userfile']['name'];

if (move_uploaded_file($_FILES['userfile']['tmp_name'], $uploadfile)) {
echo 'アップロードを完了しました。';
} else {
echo 'アップロードに失敗しました。';
}
} else {
?>
アップロードします。
</p>
<form enctype="multipart/form-data" action="uptest.php" method="POST">
<input type="hidden" name="MAX_FILE_SIZE" value="30000">
File: <input name="userfile" type="file">
<input type="submit" value="Send File">
</form>
</body>
</html>
<?php
}
?>


php.ini の置き場所ですが、
設定内容が反映され、問題なく稼動してるのなら良いのですが、
php.ini が反映されてないような気がします。

「指定されたモジュールが見つかりません」と叱られるのは
php.ini の extension_dir の記述違いが原因ではないでしょうか。
upload_tmp_dir と同じ間違いをしてなかご確認ください。
その上で、Windows にコピーすればOKです。
あとサーバの再起動も忘れずに。
Parent: 2030  reply: 2032 返信 編集 削除

[2032] 今度は画像表示をすることができません。

user: オレンジ | created: 2005-01-07 15:58
ゆうじさん
はじめまして。
丁寧なご解説ありがとうございました。
オリジナルコードまで作ってくれるなんて、
本当に感動しました。

お蔭様でアップロードはできました!
しかし、画像掲示板のようにアップロードした画像を画面に表示することができません…。
<img scr=<?php $POST['userfile']; ?>を先頭にもってくれば画像は表示できるのですが、
変わりにアップロードができません。
この繰り返しで、また手がつかない状態です。

ご迷惑お掛けしてすみません。
Parent: 2031  reply: 2040 返信 編集 削除

[2040] 登録処理と表示処理を分離

user: ゆうじ | created: 2005-01-11 00:40
遅くなりました。

[2026]でhamajiさんが示してくれたように、
名前やメールアドレス、コメント、画像ファイルなどの「登録処理」と
画像を含めたデータの「表示処理」をきれいに分けてみてはいかがでしょう。


登録処理の際、
(http:から始まる)画像ファイルのURLと
記事番号($number)もデータファイルに保存しておき
最後のリダイレクト時に、

header("Location: hyouji.php?num=$number");

として記事番号をURL引数に与えてあげれば
hyouji.php では $_GET['num'] を元に記事を探して
表示するだけですみます。

あわせて更新ボタンによる
二重投稿の件も解決しますし。
Parent: 2032  reply: 2042 返信 編集 削除

[2042] 本当に申し訳ありません

user: オレンジ | created: 2005-01-12 21:11
初心者ですみません。
ゆうじさんのおっしゃる通りに試してみたのですが、
やっぱり表示できません。
言いづらいのですが、
コードを書いて頂けないでしょうか。

このような失礼はもう致しませんが、
今回の件はどうしても完成したいものです。
どうか教えてください。
お願いします。
Parent: 2040  reply: 2043 返信 編集 削除

[2043] アップ&表示テストコード

user: ゆうじ | created: 2005-01-12 23:19
> ゆうじさんのおっしゃる通りに試してみたのですが、
> やっぱり表示できません。

どんなコードを書いて、
どんな現象になって、
どう考えたのか。

これがわかれば、
もっと適切なアドバイスが出来ると思います。
がんばりましょう。

---
登録処理と表示処理を分離をすればロジックが明確になって
間違っている箇所も見つけやすくなると思ったので
記事 [2040] を提案したのですが、
混乱させてしまったようですね。すみません。

飛ばさず丁寧にいきましょう。
画像が表示できない件に戻りますね。


[2031] アップロードテストコードに
ちょっと手を加えてみました。
(A)と(B)をお手元の環境に書き換えれば表示できると思います。

<html>
<body>
<p>
<?php
//(A)画像ファイル置き場のURL
$imageURL = 'http://localhost/images/';

//(B)画像ファイル置き場の絶対パス
$imageDir = 'D:/home/myname/public_html/images/';


if(isset($_FILES['userfile'])) {
$uploadfile = $imageDir. $_FILES['userfile']['name'];
if (move_uploaded_file($_FILES['userfile']['tmp_name'], $uploadfile)) {
echo '<img src="'. $imageURL. $_FILES['userfile']['name']. '" />';
} else {
echo 'アップロードに失敗しました。';
}
} else {
?>
アップロードします。
</p>
<form enctype="multipart/form-data" action="uptest.php" method="POST">
<input type="hidden" name="MAX_FILE_SIZE" value="30000">
File: <input name="userfile" type="file">
<input type="submit" value="Send File">
</form>
</body>
</html>
<?php
}
?>
Parent: 2042  reply: 2046 返信 編集 削除

[2046] ---

user: --- | created: 2005-01-13 12:23
--- 削除されました ---
Parent: 2043  reply: 2047 返信 編集 削除

[2047] parse error

user: ゆうじ | created: 2005-01-13 17:50
> 私は、絶対パス=画像を置くフォルダ名、画像URL=画像を置くフォルダ名と解釈して試しているのですが、そこに問題があるのでしょうか?

画像ファイルを置くフォルダを、
コンピュータから見た場合とネットからみた場合で
書き方を変えただけで、同じフォルダを指してます。
その解釈でまちがいありません。

# IMGタグに記述する場合は、
# ネットから見た URL で記述しなければならないので
# 使い分けてるだけです。

//(A)画像ファイル置き場のURL
$imageURL = 'http://localhost/a/images/';

↑ここのところ、
最後のスラッシュが無いので、
表示されないのではないでしょうか。
PHPが吐き出した、HTMLを確認してください。


---

それから挙げていただいたコードですが、
いくつか記述違いがあります。

1行目:<? php
<? と PHP の間は詰める。⇒ <?php
# 離すとphpという定数を指し示す。
# エラーメッセージが指してるのはこのことでしょう。)

7行目:define(MAX_SIZE,100);
MAX_SIZE ⇒ "MAX_SIZE"
定数名の定義は、' 又は " で囲みましょう。

14行目:"image/swf",
配列の要素の最後に ","(カンマ)はいりません。

25行目:case 'upload';
; ⇒ :

34行目:$filename = UPLOAD_DIR.$sname;
$sname ⇒ $name

88行目:default;
; ⇒ :


「・・・unexpected,T-STRING・・・」というエラーは、
parse error: で始まるエラーだと思いますが、

parse error は、
「PHPの構文としておかしい個所がある」という意味で
ほとんどの場合、ちょっとした記述違いが原因です。
もう一度よく見直してみましょう。
Parent: 2046  reply: 2049 返信 編集 削除

[2049] できました!

user: オレンジ | created: 2005-01-14 16:45
解説ありがとうございました。
ようやく画像表示をすることに成功しました。
これも、ゆうじさんの親身なアドバイスのおかげです。

今は応用したプログラムを作成中です。
また今後とも宜しくお願い致します。
Parent: 2047  返信 編集 削除
スレッド表示 | フラット表示〕 全トピック 920 件中 495 番目 次≫ ≪前
ページの一番上へ
Googleグックマークに登録 Yahooグックマークに登録 livedoorクリップに登録 @niftyクリップに登録 はてなブックマークに登録 deliciousに登録 Buzzurlに登録 FC2ブックマークに登録
最近更新された掲示板トピックス
管理人Blog
Yahoo Search

最近更新したNote
PHPマニュアル
今日のブックマーク
PHPマニュアル関数検索
関数名を入力し検索ボタンをクリック↑